PHP mail: Jak wysłać wiadomość e-mail ze strony?
Tworzenie interakcji z użytkownikami Twojej strony internetowej to kluczowy element budowy lojalności i zaangażowania. W tym artykule dowiesz się, jak używać funkcji PHP mail do wysyłania personalizowanych wiadomości e-mail bezpośrednio ze swojej strony. Od prostych formularzy kontaktowych po zaawansowane powiadomienia, PHP mail otwiera przed Tobą bramy komunikacji.
Pomoże nam w tym funkcja mail() mająca postać:
bool mail ( string $do , string $temat , string $tresc [, string $dodatkowe_naglowki [, string $dodatkowe_parametry ]] )
Następujące zmienne odpowiadają za:
$do – w niej przechowywany jest adres adresata poniżej dozwolone łańcuchy znaków:
osoba@example.com
osoba@example.com, imie.nazwisko@example.com
Osoba <osoba@example.com>
Osoba <osoba@example.com>, Inna osoba <ktokolwiek@example.com>
$temat – jest to temat nagłówka wiadomości – nie może zawierać znaków przejścia do nowej linii, ponieważ e-mail może zostać wysłany nieprawidłowo.
$tresc – główna treść wiadomości – każdy wiersz tekstu powinien być zakończony znakiem końca linii LF (\n). Wiersze nie powinny zawierać więcej niż 70 znaków.
(Tylko dla Windows) Kiedy PHP łączy się bezpośrednio do serwera SMTP i zostaną znalezione znaki wskazujące na koniec wiadomości (\n.) to zostaną one usunięte, co spowoduje, że wiadomość będzie mało czytelna. Aby temu zapobiec, należy dodać dodatkową kropkę.
dodatkowe_naglowki (opcjonalnie) – parametr ten jest wykorzystywany do wstawienia dodatkowych nagłówków
(From, Cc, oraz Bcc). Dodatkowe nagłówki rozdziela się przy pomocy znaku powrotu karetki i nowego wiersza – CRLF (\r\n).
From – od kogo pochodzi wiadomość (dozwolone łańcuchy znaków takie same jak dla zmiennej $do).
Cc – ( carbon copy ) – informuje o wysłanej kopii wiadomości do innych odbiorców niż główny (dozwolone łańcuchy znaków takie same jak dla zmiennej $do).
Bcc – (blind carbon copy) – podobnie jak w przypadku C, ale adresy e-mail są ukrywane przed innymi adresatami.
Każdy e-mail musi zawierać nagłówek From. Można go podawać jako parametr dodatkowe_naglowki albo ustawić w pliku php.ini.
Wynikiem pominięcia tego nagłówka będzie informacja o błędzie, podobna do tej: Warning: mail(): „sendmail_from” not set in php.ini or custom „From:” header missing. W Windows nagłówek From ustawia także Return-Path.
Poniżej przykładowy kod PHP:
// kilku odbiorców
$do = 'ania@przyklad.com' . ', '; // zwróćmy uwagę na przecinek
$do .= 'tomek@przyklad.com';
// temat
$temat = 'Przykładowy temat';
// wiadomość
$wiadomosc = 'Przykładowy tekst';
// Aby wysłać e-mail HTML, musi być ustawiony nagłówek Content-type
$naglowki = 'MIME-Version: 1.0' . "\r\n";
// Warto też ustawić kodowanie języka wiadomości, aby nam nie wyszły krzaczki
$naglowki .= 'Content-type: text/html; charset=utf-8' . "\r\n";
// Dodatkowe nagłówki
$naglowki .= 'From: Przykładowy Nadawca <nadawca@example.com>' . "\r\n";
$naglowki .= 'Cc: cc@example.com' . "\r\n";
$naglowki .= 'Bcc: bcc@example.com' . "\r\n";
$naglowki .= 'Reply-To: admin@przyklad.com' . "\r\n";
mail($do, $temat, $wiadomosc, $naglowki);
Część nagłówka Reply-To: to zwrot do adresata. Jeśli wysłana wiadomość nie dotrze do adresata
to wróci na podany adres e-mail w tej części nagłówka.
Kod PHP jest gotowy. Aby wysłać wiadomość potrzeba prostego formularza:
<form action="skrypt.php" method="post">
<input type="text" name="email" /><br />
<textarea name="tresc" cols="30" rows="6"></textarea>
<input type="submit" value="wyślij" />
</form>
Nasz formularz zawiera tylko dwa pola, ale to wystarczy do pokazania jak działa wysyłanie za
pomocą funkcji mail(); Po wprowadzeniu danych do formularza i ich wysłaniu, wykonuje się kod w pliku skrypt.php. Na początku musimy pobrać dane z formularza, najlepiej metodą POST:
$email = isset($_POST['email']) ? $_POST['email'] : null;
$wiadomosc = isset($_POST['tresc']) ? $_POST['tresc'] : null;
Powyższy kod sprawdza, czy treść z formularza została wysłana za pomocą metody POST. Jeśli dane te istnieją to są przypisywane do zmiennych $email i $wiadomosc. W przeciwnym razie do zmiennych zwracane są wartości NULL.
Gotowy kod PHP prezentuje się następująco:
<?php
$do .= 'admin@przyklad.com';
$email = isset($_POST['email']) ? $_POST['email'] : null;
$wiadomosc = isset($_POST['tresc']) ? $_POST['tresc'] : null;
$temat = 'Przykładowy temat';
$naglowki = 'MIME-Version: 1.0' . "\r\n";
$naglowki .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$naglowki .= 'From: Przykładowy Nadawca <nadawca@example.com>' . "\r\n";
$naglowki .= 'Reply-To:' . $email . "\r\n";
mail($do, $temat, $wiadomosc, $naglowki);
?>
W artykule poznaliśmy podstawy funkcji mail() w PHP, dzięki czemu teraz możemy z powodzeniem wysyłać e-maile z naszej strony. Oczywiście to nie koniec, ponieważ należy również poznać pozostałe aspekty projektowania formularzy za pomocą funkcji PHP mail(): zasady bezpieczeństwa, kontrola błędów, czy zarządzanie załącznikami. Tematy te zostaną poruszone w naszych kolejnych wpisach.