PHP/Wysyłanie e-maili

< PHP
Poprzedni rozdział: Sesje
Następny rozdział: Internacjonalizacja

Wysyłanie e-maili

edytuj

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()

edytuj

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.

Biblioteka pear::mail

edytuj

Dla osób które lubią używać gotowych bibliotek można polecić moduł mail z pear. Szczegóły znajdziesz pod adresem: http://pear.php.net/package/Mail . Biblioteka jest dosyć prosta i posiada w swojej dokumentacji jasne przykłady.

Wysyłanie załączników jest równie proste - zainteresuj się klasą pear::Mail_Mime.

Przykłady

edytuj

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".PHP_EOL."Reply-To: moj@mail.pl".PHP_EOL."Content-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 można podać zarówno wewnątrz cudzysłowów, jak i apostrofów. Użyto tutaj stałej PHP_EOL, zmiennej środowiskowej. Przejść do nowej linii można na dwa sposoby. Pierwszy, uniwersalny i mniej popularny to ta stała, drugi - zależny od systemu serwera - \r\n dla Windows, \n dla Linuksa i \r dla Mac'a. 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ść.

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>".PHP_EOL;
   $naglowki .= "From: moj@mail.pl <moj@mail.pl>".PHP_EOL;
   $naglowki .= "MIME-Version: 1.0".PHP_EOL;
   $naglowki .= "Content-type: text/html; charset=iso-8859-2".PHP_EOL; 

   //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';
   }

Dokumentacja

edytuj