JustPaste.it

Wysyłanie e-maili - Podstawy PHP

Wysyłanie e-maili

Aby wysyłać e-maile z PHP, interpreter musi być skonfigurowany do pracy z demonem pocztowym. Odpowiednie dyrektywy znajdują się w pliku php.ini w sekcji [mail function]. Należy tam podać odpowiednie parametry w zależności od systemu operacyjnego:

  • Dla systemów Win32 - host oraz port, pod jakim pracuje demon pocztowy protokołu SMTP. Możesz próbować łączyć się z twoją własną skrzynką e-mail u jednego z providerów, lecz jeżeli znajdujesz się za firewallem, prawdopodobnie będziesz musiał zainstalować serwer poczty na własnym komputerze (np. Mercury for Win32).
  • Dla systemów Unix należy podać wywołanie oraz ewentualne parametry programu sendmail.

Funkcja mail()

Aby wysłać e-maila za pomocą PHP, musimy użyć do tego funkcji mail(). Jej składnia jest następująca:

mail(adresat, temat, wiadomość, [nagłówki[, parametry]])

Funkcja zwraca wartość TRUE, jeżeli wiadomość została poprawnie przekazana serwerowi poczty.

Przykłady

Następujący przykład spowoduje wysłanie wiadomości e-mail na adres jan_testowy@serwer.pl o temacie "Witaj" i treści "Oto test funkcji mail":

<?php
if(mail('jan_testowy@serwer.pl', 'Witaj', 'Oto test funkcji mail'))
{
echo 'Wiadomość została wysłana';
}
?>

Nagłówki pozwalają na ustawienie dodatkowych informacji o wiadomości, np. jej nadawcy lub kodowaniu znaków: Możemy również użyć zmiennych:

<?php
$naglowki = "From: moj@mail.pl\r\nReply-To: moj@mail.pll\r\nContent-type: text/plain; charset=iso-8859-2";

if(mail('jan_testowy@serwer.pl', 'Witaj', 'Oto test funkcji mail', $naglowki))
{
echo 'Wiadomość została wysłana';
}
?>

Nagłówki podaliśmy wewnątrz cudzysłowów, ponieważ potrzebne nam są kody formatujące \r oraz \n (zejścia do nowej linii). Wewnątrz edytora najlepiej podawać wszystkie nagłówki w jednym ciągu i zejścia zaznaczać przy użyciu właśnie tych kodów. Inaczej może to spowodować wysłanie niepoprawnej wiadomości, gdyż niektóre edytory mają tendencję do zniekształcania tych zejść.

Uwaga! Uwaga!
Nie umieszczaj danych od użytkownika w nagłówkach bez uprzedniego usunięcia z nich przejść do nowej linii. W przeciwnym wypadku użytkownik będzie miał możliwość podrzucenia nowych nagłówków, a nawet dodania załączników do wiadomości i twój skrypt zostanie wykorzystany przez spamboty do rozsyłania spamu.
Porada Porada
Nagłówki używające polskich liter muszą być potraktowane specjalnym kodowaniem, np. Quoted-Printable. W przeciwnym wypadku serwery i czytniki poczty nie rozpoznają kodowania nagłówków i mogą zdeformować polskie znaki lub wręcz uznać je za błąd transferu.

Z poziomu PHP można także wysyłać e-maile w formacie HTML. W tym celu należy dodać do wiadomości odpowiednie nagłówki:

<?php
// Naglowki mozna sformatowac tez w ten sposob.
$naglowki = "Reply-to: moj@mail.pl <moj@mail.pl>\r\n";
$naglowki .= "From: moj@mail.pl <moj@mail.pl>\r\n";
$naglowki .= "MIME-Version: 1.0\r\n";
$naglowki .= "Content-type: text/html; charset=iso-8859-2\r\n";

//Wiadomość najczęściej jest generowana przed wywołaniem funkcji
$wiadomosc = '<html>
<head>
<title>Wiadomość e-mail</title>
</head>
<body>
<p><b>Treść wiadomości</b>: To jest treść wiadomości z formatowaniem HTML.</p>
</body>
</html>'
;


if(mail('jan_testowy@serwer.pl', 'Witaj', $wiadomosc, $naglowki))
{
echo 'Wiadomość została wysłana';
}
?>
Porada Porada
Niektórzy programiści piszą własne implementacje funkcji mail(), samodzielnie łącząc się z serwerem i obsługując protokół SMTP. Pozwala to na uniezależnienie się od ustawień połączenia w pliku php.ini, lecz jest skomplikowane i nie będziemy się tym zagadnieniem tu zajmować.

Dokumentacja

Treść pochodzi ze strony WikiBooks i jest udostępniana na licencji GNU FDL

 

Autor: WikiBooks