Przegląd PHP mail
Funkcja mail() jest wbudowana w PHP i służy do wysyłania e-maili bezpośrednio z serwera internetowego. To prosty sposób na wysyłanie powiadomień, wiadomości z formularzy kontaktowych, potwierdzeń zamówień i innych typów wiadomości.
Odpowiednia do podstawowej funkcjonalności e-mail bez użycia zewnętrznych bibliotek.
Jak działa mail()
Kiedy wywołujesz funkcję mail(), PHP przekazuje e-mail do agenta transferu poczty (MTA) zainstalowanego na serwerze (zwykle Sendmail lub Postfix). MTA następnie przetwarza i dostarcza wiadomość na wskazany adres.
Składnia
mail(to, subject, message, headers, parameters);
Parametry
| Parametr | Opis |
|---|---|
| $to | Adres e-mail odbiorcy. Możesz podać wiele adresów oddzielonych przecinkami. |
| $subject | Temat e-maila. Nie może zawierać łamań linii. |
| $message | Główna treść wiadomości. |
| $headers | Dodatkowe nagłówki, takie jak From, Reply-To, Cc, Bcc itp. |
| $parameters | Dodatkowe parametry, takie jak określenie nadawcy dla Sendmail (-f). |
Prosty przykład
<?php $to = "user@example.com"; $subject = "Test Email"; $message = "Hello! This is a test email sent using PHP."; $headers = "From: webmaster@yourdomain.com"; mail($to, $subject, $message, $headers); ?>
Ważne uwagi
1. Nagłówek From: jest wymagany
Jeśli nie określisz nagłówka From:, większość serwerów pocztowych odrzuci wiadomość jako podejrzaną lub spam.
$headers = "From: noreply@yourdomain.com";
2. Formatowanie wiadomości wieloliniowych
Użyj rn, aby oddzielić linie w swojej wiadomości:
$message = "Hello,rnrnThank you for your order.rnrnBest regards,rnYour Team";
3. Wiele nagłówków
Użyj rn, aby oddzielić wiele nagłówków, takich jak Reply-To, Cc i Bcc:
$headers = "From: admin@yourdomain.comrn"; $headers .= "Reply-To: support@yourdomain.comrn"; $headers .= "Cc: someone@yourdomain.comrn";
Przykład: Wysyłanie e-maila HTML (tylko tekst)
Funkcja mail() nie obsługuje załączników natywnie. Ale możesz wysyłać e-maile HTML lub ręcznie ustawić typ treści:
$headers = "MIME-Version: 1.0rn"; $headers .= "Content-type: text/html; charset=UTF-8rn"; $headers .= "From: info@yourdomain.com"; $message = "<h1>Hello!</h1><p>Your order has been received.</p>"; mail("user@example.com", "Order Confirmation", $message, $headers);
Typowe problemy i rozwiązania
| Problem | Przyczyna / Rozwiązanie |
|---|---|
| Wiadomość e-mail nie została dostarczona | Brak nagłówka From: lub adres IP serwera znajduje się na czarnej liście |
| Wiadomość e-mail w ogóle się nie wysyła | Brak zainstalowanego MTA (wymagany np. Sendmail/Postfix) |
| Błąd: mail() został wyłączony | mail() jest wyłączony w php.ini (często przez politykę hosta) |
| Rosyjski tekst pojawia się jako ???? | Charset nie jest ustawiony na UTF-8 w nagłówkach |
| Wiadomości e-mail trafiają do spamu | Nieprawidłowy From, brak SPF/DKIM lub źle skonfigurowana domena |
Podsumowanie
Funkcja mail() jest podstawowym, ale potężnym narzędziem do wysyłania e-maili bezpośrednio z skryptów PHP. Jest:
- Łatwa w użyciu
- Nie wymaga dodatkowych bibliotek
- Odpowiednia do wewnętrznych powiadomień, formularzy kontaktowych i autoresponderów
Jednak pamiętaj o jej ograniczeniach:
- Zależy od konfiguracji poczty serwera
- Nie obsługuje załączników
- Może być domyślnie wyłączona w niektórych środowiskach hostingu współdzielonego
Jeśli planujesz regularnie wysyłać e-maile, upewnij się, że twój serwer jest odpowiednio skonfigurowany do wysyłania poczty (z zainstalowanym Sendmail/Postfix, skonfigurowanymi rekordami SPF/DKIM oraz włączoną funkcją mail() w php.ini).


