Mailto: jak zrobić link do maila z tematem i treścią
Link mailto otwiera nową wiadomość z adresem, tematem i treścią. Jak go zapisać zgodnie z RFC 6068, dlaczego spacja to %20, a nowa linia %0D%0A, i jak zrobić kod QR, który otwiera gotowego maila.
Mailto to schemat adresu, który zamiast strony otwiera nową wiadomość w programie pocztowym. Najprostszy link wygląda tak: <a href="mailto:[email protected]">Napisz do nas</a>. Po kliknięciu program pocztowy otwiera szkic z wpisanym odbiorcą. Do linku możesz dopisać temat i treść, kilku odbiorców i kopię — ale tu zaczynają się błędy, które powtarzają poradniki: spacja zapisana jako +, nowa linia jako %0A, drugi znak zapytania w środku linku. Poniżej składnia według normy RFC 6068, pomiar tego, ile temat i treść kosztują w kodzie QR, i lista sytuacji, w których link mailto po prostu nie zadziała. Gotowy kod QR, który otwiera maila, zrobisz w generatorze kodów QR, typ E-mail.
Mailto — co to jest i co robi po kliknięciu
Link mailto niczego nie wysyła. Otwiera szkic wiadomości, a decyzja o wysłaniu należy do człowieka. Norma, która opisuje schemat, czyli RFC 6068, mówi to wprost: przy zwykłym adresie strony przeglądarka od razu łączy się z serwerem, a przy mailto „klient tworzy wiadomość do wskazanego adresu z polami ustawionymi domyślnie. Użytkownik może ją edytować, wysłać bez zmian albo nie wysyłać” (RFC 6068, §3). W części o bezpieczeństwie norma dodaje, że program pocztowy nie powinien wysłać wiadomości z linku mailto, zanim nie pokaże użytkownikowi pełnej treści i nie poprosi o zgodę (RFC 6068, §7).
MDN, dokumentacja techniczna Mozilli, opisuje to samo z perspektywy strony: da się zrobić link albo przycisk, który po kliknięciu otwiera nową wiadomość e-mail zamiast strony, i służy do tego schemat mailto: w atrybucie href (MDN, Creating links).
Kto otworzy szkic, zależy od urządzenia. Na iPhonie link mailto uruchamia aplikację Mail i ekran nowej wiadomości, a gdy aplikacji nie ma, system wyświetla ostrzeżenie — tak opisuje to archiwalna dokumentacja Apple (Apple, Mail Links). To strona z archiwum dla programistów, ostatnio aktualizowana w 2017 r., więc traktuj ją jako opis zasady, nie aktualnego wyglądu ekranu. Na Androidzie dokumentacja dla programistów radzi używać mailto: właśnie po to, żeby wiadomość obsłużyła aplikacja pocztowa, a nie komunikator czy aplikacja społecznościowa (Android Developers, Common intents). Na komputerze link otwiera domyślny program pocztowy systemu — albo nic, jeśli żadnego nie ustawiono. O tym przypadku jest osobna sekcja niżej.
Składnia linku mailto: adres, kilku odbiorców, cc, bcc
Link mailto ma prostą gramatykę: mailto:, potem odbiorcy oddzieleni przecinkami, potem opcjonalnie pola. Pierwsze pole poprzedza ?, każde następne & (RFC 6068, §2). Przykład z pełnym zestawem: mailto:[email protected],[email protected][email protected]&subject=Oferta%20na%202027&body=Dzie%C5%84%20dobry
Z czego składa się link mailto
części linku i przykład poprawny oraz błędny z normy
Źródło: RFC 6068, §2, §4 i §6.1
Opis figury
Link mailto rozłożony na części: mailto: to schemat; [email protected],[email protected] to odbiorcy po przecinku; znak zapytania występuje raz; [email protected] to kopia; ampersand oddziela pola; subject=Oferta%20na%202027 to temat; body=Dzie%C5%84%20dobry to treść. Pod spodem przykład poprawny z RFC 6068 §6.1: mailto:[email protected][email protected]&body=hello. Przykład błędny z normy, oznaczony WRONG: mailto:[email protected][email protected]?body=hello, z drugim znakiem zapytania. Podpis: pewne są tylko subject i body.
Najczęstszy błąd to drugi znak zapytania. Norma pokazuje go wprost jako przykład błędny: mailto:[email protected][email protected]?body=hello jest oznaczony słowem „WRONG!”, a poprawna wersja ma &body=hello (RFC 6068, §6.1). Zasada jest jedna: ? pojawia się w linku raz, przed pierwszym polem.
Trzy kolejne reguły z normy przydają się przy linkach do kilku osób:
- Kilku odbiorców wpisuj po przecinku przed
?. Norma dopuszcza też poleto=w parametrach, ale oznacza tę formę jako NOT RECOMMENDED, bo programy pocztowe obsługują ją różnie, a niektóre ignorują (RFC 6068, §2). - Nie powtarzaj tego samego pola. Dwa razy
cc=w jednym linku to zachowanie różne w zależności od programu — norma mówi, że twórcy linków nie powinni tego robić. Kilka adresów w kopii zapisujesz w jednym polu, po przecinku. - Na
ccibccnie licz w stu procentach. Według normy twórca linku nie może oczekiwać, że program pocztowy zrozumie coś więcej niż temat (subject) i treść (body), a pola To, Cc i Bcc nie muszą przełożyć się dokładnie na nagłówki wiadomości (RFC 6068, §3–4).
Adresu e-mail nie musisz kodować. W poradnikach pojawia się rada, żeby @ zapisywać jako %40 — gramatyka RFC 6068 dopuszcza @ w adresie bez zmian. Kodujesz tylko znaki, które coś w linku znaczą: adres z & w środku, jak Mike&[email protected], norma zapisuje jako mailto:Mike%[email protected].
Temat i treść: subject, body i kodowanie znaków
Temat i treść muszą być zakodowane procentowo, czyli każdy znak, który nie może stać w adresie, zamieniony na % i dwie cyfry szesnastkowe. %20 to spacja (RFC 3986, §2.1). Tyle mówi każdy poradnik. Diabeł siedzi w trzech znakach: spacji, nowej linii i polskiej literze.
Co dzieje się ze znakami w treści maila
funkcja URLSearchParams, nasz generator i wymóg RFC 6068
Źródło: RFC 6068 §5, wartości policzone funkcją generatora DVN Links, 2026-10-20
Opis figury
Tabela sześciu znaków. Spacja: URLSearchParams daje plus, nasz generator %20, RFC 6068 zaleca %20. Nowa linia: URLSearchParams %0A, generator %0D%0A, RFC wymaga %0D%0A. Plus: wszędzie %2B, RFC dopuszcza %2B. Ampersand: wszędzie %26, RFC wymaga %26 poza rolą separatora. Litera ł: %C5%82. Litera é: %C3%A9 — RFC: UTF-8, każdy bajt zakodowany osobno. Podpis: plusa zamiast spacji nie da się odróżnić od prawdziwego plusa, a plus bywa częścią adresu.
Spacja: %20, nie plus
Formularze w przeglądarkach i popularne funkcje do budowania parametrów (w JavaScripcie URLSearchParams) zapisują spację jako +. W adresie strony to działa, w linku mailto — nie zawsze. Norma wyjaśnia dlaczego: plusa oznaczającego spację nie da się odróżnić od prawdziwego plusa w linku mailto. Dlatego przy tworzeniu linków mailto wszystkie spacje powinny być zapisane jako %20, a plus może być zapisany jako %2B. RFC przypomina przy tym, że plus bywa częścią adresu e-mail — tak zwany subadres, na przykład [email protected] (RFC 6068, §5).
Na tym potknęliśmy się sami. Nasz generator QR buduje parametry przez URLSearchParams, a ten daje + zamiast spacji — program pocztowy mógłby pokazać temat „Zapytanie+ofertowe”. Generator zamienia więc każdy + na %20. Podmiana jest bezpieczna, bo prawdziwy plus z treści URLSearchParams zapisuje już wcześniej jako %2B, więc nie zamieni się w spację. Ciekawostka: dokładnie tę samą podmianę robi przeglądarka, gdy formularz HTML wysyła dane metodą mailto — specyfikacja HTML każe zastąpić plusy ciągiem %20, a wcześniej zamienia każdą nową linię na parę CR LF (WHATWG HTML, form submission).
Nowa linia: %0D%0A, nie %0A
Nowa linia w treści wiadomości według RFC 6068 MUSI być zapisana jako %0D%0A — czyli znak powrotu karetki i znak nowej linii (RFC 6068, §5). W polskich i angielskich poradnikach często pada %0A. Wielu programom pocztowym to wystarczy, ale skoro norma używa słowa MUST, link zgodny z nią jest bezpieczniejszy. W temacie nowych linii w ogóle nie stosuj — norma mówi, że nie powinno ich być w polach innych niż treść.
To też poprawiliśmy w naszym generatorze. Pole treści w przeglądarce oddaje nowe linie jako samo \n, które URLSearchParams zamienia na %0A. Od tej poprawki generator najpierw zamienia każdą nową linię na parę \r\n, więc w kodzie QR ląduje %0D%0A, tak jak chce norma. Koszt: każda nowa linia to sześć znaków w kodzie.
Polskie litery: 6 znaków za jedną
Znaki spoza ASCII norma każe zapisać w UTF-8, a potem zakodować procentowo każdy bajt (RFC 6068, §2). Polska litera to w UTF-8 dwa bajty, więc ł zamienia się w %C5%82 — sześć znaków zamiast jednego. Temat „Zgłoszenie reklamacyjne” po zakodowaniu to Zg%C5%82oszenie%20reklamacyjne. W linku na stronie nie ma to znaczenia, w kodzie QR — ma, o czym niżej. Szerzej o polskich znakach w adresach piszemy w tekście o adresie URL.
Zakoduj też znaki, które w linku coś znaczą: & w treści jako %26 (inaczej program uzna, że zaczyna się nowe pole), ? jako %3F, # jako %23. W JavaScripcie zrobi to encodeURIComponent; ręcznie najłatwiej wpisać tekst w dowolne narzędzie do kodowania URL.
Link mailto w HTML: href, przycisk, WordPress
W HTML link mailto to zwykły element <a> z adresem w atrybucie href. MDN podaje, że linki otwierające program pocztowy robi się właśnie schematem mailto: (MDN, element a), a wartości pól muszą być zakodowane, łącznie ze spacjami i niewidocznymi znakami, jak tabulatory i powroty karetki (MDN, Creating links).
1<a href="mailto:[email protected]?subject=Zapytanie%20ofertowe&body=Dzie%C5%84%20dobry"2 >Napisz do nas</a3>Zwróć uwagę na &. Znak & jest w HTML zarezerwowany, więc w atrybucie trzeba go zapisać jako encję & — norma mailto pokazuje to na własnym przykładzie (RFC 6068, §6.1). Przeglądarki zwykle wybaczają goły &, ale walidator HTML zgłosi błąd.
„Przycisk” do maila to ten sam link, tylko inaczej ostylowany. W WordPressie i kreatorach stron, takich jak Elementor, w polu adresu przycisku wpisujesz cały link zaczynający się od mailto: — kreator zrobi z niego href. Jeśli edytor pola nie przyjmuje linku z parametrami, wstaw blok HTML i wpisz znacznik <a> ręcznie.
Formularz z action="mailto:" to inna historia. Specyfikacja HTML opisuje, co przeglądarka robi przy takim formularzu: zbiera pola, koduje je i otwiera program pocztowy (WHATWG HTML). Dane nie trafiają na Twój serwer, tylko do szkicu maila, który odwiedzający i tak musi wysłać. To nie jest formularz kontaktowy w zwykłym sensie — porównanie obu rozwiązań jest niżej.
Gdzie jeszcze działa mailto: stopka maila, PDF, dokument
Link mailto to zwykłe hiperłącze, więc działa wszędzie, gdzie działają linki. W stopce maila wstaw go jako link na adresie albo na tekście „Napisz do działu handlowego”. W dokumencie tekstowym i w PDF-ie wstawiasz go tak jak link do strony — w okienku adresu wpisujesz cały ciąg z mailto:.
Czy kliknięcie w PDF-ie otworzy wiadomość, zależy od dwóch rzeczy: czy czytnik PDF w ogóle otwiera linki i czy na urządzeniu jest program pocztowy. Nie sprawdzaliśmy wszystkich czytników, więc jedyna rada, za którą ręczymy, to: kliknij link w gotowym pliku, na komputerze i na telefonie, zanim wyślesz dokument dalej.
Kod QR do maila: mailto w kodzie
Kod QR może otworzyć gotowego maila — zawiera wtedy po prostu link mailto. Projekt ZXing, autor popularnej biblioteki do czytania kodów, radzi kodować pełny link mailto:adres, a nie goły adres, żeby czytnik na pewno rozpoznał go jako e-mail. Czytnik powinien wtedy otworzyć pustą wiadomość do tego adresu (ZXing, Barcode Contents). ZXing wspomina też o formacie MATMSG, który wprowadziło NTT DoCoMo, ale nasz generator używa zwykłego mailto.
W generatorze kodów QR wybierasz typ E-mail i wypełniasz trzy pola: adres e-mail, temat i treść wiadomości. Generator przyjmuje jeden adres, temat do 200 znaków i treść do 1000 znaków — to limity naszego formularza, nie normy. Kilku odbiorców, kopii ani ukrytej kopii w generatorze nie ustawisz; do tego zostaje ręcznie napisany link w HTML. Kod pobierasz jako PNG bez zakładania konta.
Zanim wpiszesz długą treść, popatrz na wykres. Policzyliśmy, jak rośnie kod, tą samą funkcją, która buduje treść kodu w generatorze, i tą samą biblioteką, która go rysuje.
Kod QR z mailto: temat i treść a wielkość kodu
korekcja H, liczba znaków treści kodu, wersja QR i minimalna szerokość wydruku
Źródło: obliczenia DVN Links, funkcja generatora i biblioteka qrcode 1.5.4, moduł min. 0,396 mm według GS1, 2026-10-20
Opis figury
Wykres słupkowy pięciu wariantów kodu z adresem [email protected] przy korekcji H. Sam adres, 24 znaki: wersja 3, 29×29 modułów, wydruk od 1,5 cm. Z tematem Zapytanie ofertowe, 53 znaki: wersja 6, 41×41, 2 cm. Z tematem Zgłoszenie reklamacyjne, 63 znaki: wersja 7, 45×45, 2,5 cm. Plus treść w dwóch liniach, 159 znaków: wersja 13, 69×69, 3,5 cm. Plus treść w pięciu liniach, 377 znaków: wersja 20, 97×97, 4,5 cm. Powyżej 3 cm generator ostrzega o gęstym kodzie.
Sam adres [email protected] to 24 znaki i najmniejszy kod: wersja 3, 29×29 modułów przy korekcji H, którą dostajesz w generatorze bez konta (bo dokłada logo). Temat „Zgłoszenie reklamacyjne” podnosi kod do wersji 7. Treść w dwóch liniach (powitanie i jedno zdanie) z polskimi literami daje 159 znaków i wersję 13. Treść w pięciu liniach — 188 znaków, czyli opis zgłoszenia z numerem zamówienia — po zakodowaniu ma 377 znaków i robi z kodu wersję 20: 97×97 modułów. Taki kod potrzebuje według normy GS1 (moduł co najmniej 0,396 mm) wydruku szerokiego na 4,5 cm razem z białą ramką; generator ostrzega o gęstym kodzie już powyżej 3 cm.
Wniosek: w kodzie QR trzymaj treść krótką. Temat, który mówi, o co chodzi, i jedno zdanie w treści wystarczą — resztę klient dopisze. Jak gęstość kodu przekłada się na druk i co jeszcze sprawdzić przed wysłaniem pliku do drukarni, opisujemy w poradniku jak zrobić kod QR. Jeśli kod ma nie otwierać maila, tylko zapisać Twój adres w kontaktach telefonu, potrzebujesz innego typu — wizytówki vCard, opisanej w tekście o wizytówce z kodem QR.
Przed drukiem zeskanuj kod dwoma telefonami — najlepiej iPhone'em i Androidem — i otwórz wiadomość w programie pocztowym, którego używają Twoi klienci. Sprawdź, czy temat z polskimi literami wygląda poprawnie i czy treść dzieli się na linie tak, jak zaplanowałeś. Generator koduje znaki zgodnie z normą, ale wyświetlenie wiadomości zależy od programu pocztowego w telefonie, a tego nie kontrolujesz ani Ty, ani my.
Kod QR z mailto jest statyczny: adres, temat i treść są zapisane w samym kodzie. Po wydruku ich nie zmienisz, a ponieważ skan nie przechodzi przez żaden serwer, nikt nie policzy, ile osób go zeskanowało — także my.
Kiedy mailto zawodzi
Link mailto ma trzy słabe punkty i warto je znać, zanim postawisz na nim cały kontakt ze stroną.
Brak programu pocztowego. Link przekazuje sprawę programowi pocztowemu urządzenia. Jeśli żadnego nie ma albo nie jest skonfigurowany, kliknięcie może nic nie dać — na iPhonie bez aplikacji Mail system pokazuje ostrzeżenie (Apple, Mail Links). Dokumentacja Androida opisuje sytuację, w której na urządzeniu nie ma aplikacji zdolnej obsłużyć taką prośbę (Android Developers). Typowy przypadek to komputer w pracy, na którym poczta działa w przeglądarce: link mailto próbuje otworzyć program, którego nikt nie używa.
Poczta w przeglądarce. Gmail czy Outlook w przeglądarce obsłużą mailto tylko wtedy, gdy przeglądarka wie, że ma im przekazywać takie linki. Specyfikacja HTML przewiduje do tego mechanizm rejestrowania obsługi schematów, a mailto jest na liście schematów, które strona może zarejestrować (WHATWG HTML, custom scheme handlers). To, czy użytkownik to zrobił, jest poza Twoją kontrolą.
Boty zbierają adresy. Norma ostrzega, że linki mailto na publicznych stronach wystawiają adresy na zbieranie przez spamerów — dotyczy to wszystkich adresów w linku, także tych w bcc. Ukryta kopia nie trafi do odbiorców w polu „Do”, ale adres jest jawny w kodzie strony (RFC 6068, §7). Jeśli w bcc dopisujesz prywatny adres, każdy może go przeczytać w źródle strony.
Długość bez gwarancji. RFC 6068 nie podaje maksymalnej długości linku mailto, a my nie znaleźliśmy pierwotnego źródła, które by ją ustalało dla programów pocztowych. Liczby krążące w poradnikach dotyczą zwykle adresów stron w przeglądarkach, nie maila. Bezpieczna strategia jest prosta: krótki temat, krótka treść, a dłuższe informacje — w odpowiedzi, którą wyślesz Ty.
Mailto czy formularz kontaktowy
Mailto wygrywa prostotą, formularz — przewidywalnością. Wybór zależy od tego, czy ważniejsze jest dla Ciebie to, żeby kontakt działał u każdego, czy to, żeby nie budować zaplecza.
Link mailto czy formularz kontaktowy
pięć kryteriów wyboru
Źródło: RFC 6068 §7, dokumentacja Apple i Android; zestawienie DVN Links
Opis figury
Tabela porównawcza. Bez programu pocztowego: mailto zależy od urządzenia i może nic nie zrobić, formularz działa w każdej przeglądarce. Pomiar: mailto tylko własnym zdarzeniem, formularz liczy wysłane zgłoszenia na serwerze. Adres na stronie: przy mailto widoczny dla botów, także bcc, przy formularzu może zostać ukryty. Wdrożenie: mailto to jedna linijka HTML, formularz wymaga serwera, ochrony przed spamem i RODO. Co dostaje odbiorca: przy mailto zwykły mail, na który odpowiadasz od razu, przy formularzu zgłoszenie w systemie albo mailu.
Reguła, którą stosujemy: mailto dla stron i dokumentów, na których kontakt jest dodatkiem — stopka, PDF z ofertą, strona wizytówka firmy, kod na plakacie. Klient i tak zwykle ma pocztę w telefonie, a Ty dostajesz zwykłego maila, na którego odpowiadasz jednym kliknięciem. Formularz tam, gdzie kontakt jest celem strony — zapytania ofertowe, zgłoszenia serwisowe, rezerwacje. Formularz zadziała bez programu pocztowego, możesz w nim wymagać pól, a adres nie leży w kodzie strony. Płacisz obsługą: ktoś musi postawić serwer albo usługę, chronić formularz przed spamem i przetwarzać dane zgodnie z RODO.
Najczęściej najlepiej sprawdza się jedno i drugie: formularz jako główna droga, a obok widoczny adres z linkiem mailto dla tych, którzy wolą napisać sami. Jeśli Twoi klienci częściej piszą na komunikatorze niż mailem, rozważ link do czatu — opisujemy go w tekście o kodzie QR WhatsApp.
Czy da się zmierzyć kliknięcia w mailto
Kliknięcie w mailto nie prowadzi na żadną stronę, więc nie zostawia śladu w zwykłych statystykach. Zmierzysz je tylko po stronie swojej strony internetowej, własnym zdarzeniem.
Krótki link w DVN Links tu nie pomoże: krótki link przyjmuje wyłącznie adresy http i https, a link mailto: odrzuca. To świadoma decyzja — przekierowujemy tylko do schematów, które przeglądarka bezpiecznie obsłuży po przekierowaniu. Statystyki krótkich linków, opisane w funkcjach DVN Links, dotyczą więc linków do stron, nie do maila. Kod QR z mailto też nie da liczby skanów, bo telefon czyta go bez udziału serwera.
A Google Analytics 4? Ulepszony pomiar GA4 opisuje zdarzenie „outbound clicks”: kliknięcie linku, który prowadzi poza bieżącą domenę, do innej strony (pomoc Google Analytics). O linkach mailto ta dokumentacja nie mówi nic. Jeśli chcesz liczyć kliknięcia w adres, ustaw własne zdarzenie, na przykład w Menedżerze tagów na kliknięcie linku zaczynającego się od mailto:, i sprawdź w DebugView, czy przychodzi.
Kontrast z linkami do stron: link w newsletterze czy na ulotce, który prowadzi na stronę, możesz oznaczyć parametrami UTM i zobaczyć kampanię w analityce. Jak je ustawić, opisujemy w tekście o parametrach UTM, a dopiszesz je w kreatorze UTM. Do mailto UTM się nie przydadzą.
Najczęstsze pytania
Wpisz w HTML <a href="mailto:[email protected]">tekst linku</a>. Temat dodasz po znaku zapytania: mailto:[email protected]?subject=Temat%20wiadomo%C5%9Bci. Spacje w temacie zapisz jako %20, polskie litery — zakodowane w UTF-8, jak każe RFC 6068.
Pierwsze pole po ?, każde następne po &: mailto:[email protected]?subject=Temat&body=Tre%C5%9B%C4%87. Drugi znak zapytania to błąd, który norma RFC 6068 pokazuje jako przykład „WRONG!”. Nową linię w treści zapisz jako %0D%0A.
Najczęściej na urządzeniu nie ma skonfigurowanego programu pocztowego albo poczta działa w przeglądarce, która nie została ustawiona do obsługi linków mailto. Link przekazuje sprawę programowi pocztowemu — jeśli go nie ma, nie ma komu otworzyć wiadomości.
Tak, jeśli czytnik PDF otwiera linki, a na urządzeniu jest program pocztowy. Link wstawiasz tak samo jak link do strony, z pełnym mailto: w polu adresu. Przed wysłaniem pliku kliknij link na komputerze i na telefonie.
Tak. Kod zawiera link mailto: z adresem, tematem i treścią. W naszym generatorze to typ E-mail — za darmo, bez konta, plik PNG. Trzymaj treść krótką, bo każda polska litera i każda nowa linia powiększa kod.
Zrób kod QR, który otwiera gotowego maila
Typ E-mail w generatorze kodów QR — adres, temat i treść zakodowane zgodnie z RFC 6068, bez konta.