Jak wysłać e-mail za pomocą funkcji PHP mail()

⚡ Inteligentne podsumowanie

PHP mail to wbudowana funkcja, która wysyła e-maile bezpośrednio ze skryptu PHP, korzystając z ustawień SMTP serwera. Ten przewodnik obejmuje składnię i parametry funkcji mail(), konfigurowanie SMTP w pliku php.ini, oczyszczanie danych wprowadzanych przez użytkownika za pomocą funkcji filter_var, wysyłanie bezpiecznej poczty oraz korzystanie z PHP.Maildla niezawodnej dostawy.

  • 📧 Co robi mail(): Funkcja mail() wysyła wiadomość e-mail ze skryptu, pobierając dane odbiorcy, temat, wiadomość i opcjonalne nagłówki.
  • 📨 Transport SMTP: Poczta PHP opiera się na protokole SMTP, którego host, port i uwierzytelnianie są ustawiane w pliku konfiguracyjnym php.ini.
  • 📋 DW i UDW: Opcjonalne nagłówki dodają odbiorców kopii do wiadomości i ukrytej kopii do wiadomości, a pole UDW jest ukryte przed pozostałymi odbiorcami.
  • 🛡️ Dezynfekcja danych wejściowych: filter_var z FILTER_SANITIZE_EMAIL i FILTER_VALIDATE_EMAIL blokuje wstrzykiwanie nagłówków z danych wejściowych formularza kontaktowego.
  • 🔒 Zabezpiecz Mail: Szyfrowanie połączenia przy użyciu protokołu SSL lub TLS zabezpiecza zawartość wiadomości przed odczytaniem w trakcie przesyłania.
  • 🧰 Użyj PHPMailer: PHPMailer dodaje uwierzytelnianie SMTP, załączniki i wiadomości e-mail w formacie HTML, przez co jest bardziej niezawodny niż zwykły mail().
  • 🤖 Asystent AI: Narzędzia AI mogą konfigurować PHPMailz protokołem SMTP i zaproponuj rozwiązania, które zapobiegną trafianiu wiadomości e-mail do folderu ze spamem.

PHP Mail

Czym jest poczta PHP?

PHP mail to wbudowana funkcja PHP służąca do wysyłania wiadomości e-mail ze skryptów PHP.

Funkcja mail akceptuje następujące parametry:

  • Adres e-mail
  • Temat
  • Treść wiadomości
  • Adresy e-mail DW lub UDW

Dlaczego i kiedy używać poczty PHP

Funkcja poczty przydaje się w wielu sytuacjach:

  • Jest to ekonomiczny sposób powiadamiania użytkowników o ważnych zdarzeniach.
  • Pozwól użytkownikom na skontaktowanie się z Tobą za pośrednictwem poczty elektronicznej, udostępniając formularz kontaktowy na stronie internetowej, z którego wysyłana jest na podany adres e-mail udostępniona treść.
  • Programiści mogą używać tej funkcji do otrzymywania powiadomień o błędach systemowych pocztą e-mail.
  • Możesz go użyć do wysyłania wiadomości e-mail do subskrybentów swojego newslettera.
  • Za jego pomocą możesz wysyłać użytkownikom, którzy zapomnieli hasła, linki umożliwiające zresetowanie hasła.
  • Możesz go użyć do wysłania linków aktywacyjnych i potwierdzających e-mailem. Jest to przydatne podczas rejestracji użytkowników i weryfikacji ich adresów e-mail.

Wysyłanie poczty za pomocą PHP

Funkcja mail w PHP ma następującą podstawową składnię.

<?php
mail($to_email_address,$subject,$message,[$headers],[$parameters]);
?>

TUTAJ,

  • „$to_email_address” to adres e-mail odbiorcy wiadomości
  • „$subject” to temat wiadomości e-mail
  • „$message” to wiadomość, która ma zostać wysłana.
  • Parametr „[$headers]” jest opcjonalny. Można go użyć do podania informacji takich jak DW i UDW.
    • CC to akronim od „carbon copy”. Używa się go, gdy chcesz wysłać kopię zainteresowanej osobie, np. e-mail z reklamacją wysłany do firmy może być również wysłany jako CC do działu reklamacji.
    • BCC to skrót od „ukrytej kopii”. Jest podobny do DW, ale adresy e-mail zawarte w sekcji UDW nie są widoczne dla innych odbiorców.

Prosty Mail Transmission Protokół (SMTP)

Poczta PHP używa Simple Mail Transmission Protokół (SMTP) do wysyłania poczty.

Na serwerze hostowanym ustawienia SMTP byłyby już skonfigurowane.

Ustawienia poczty SMTP można skonfigurować w pliku „php.ini” w folderze instalacyjnym PHP.

Aby skonfigurować ustawienia SMTP na komputerze lokalnym, zakładając, że używasz XAMPP na komputerze Windows, zlokalizuj plik „php.ini” w katalogu „C:\xampp\php”.

  • Otwórz go za pomocą Notatnika lub dowolnego edytora tekstu. W tym przykładzie użyjemy Notatnika. Kliknij menu Edycja.

Prosty Mail Transmission Protokół

  • Kliknij menu Znajdź…

Prosty Mail Transmission Protokół

  • Pojawi się okno dialogowe Znajdź

Prosty Mail Transmission Protokół

  • Kliknij przycisk Znajdź następny

Prosty Mail Transmission Protokół

Znajdź wpisy w sekcji [funkcja poczty]. Domyślne linie zazwyczaj wyglądają tak:

  • ; SMTP = host lokalny
  • ; smtp_port = 25

Usuń średniki przed SMTP i smtp_port i ustaw SMTP na Serwer SMTP a port do portu SMTP. Twoje ustawienia powinny wyglądać następująco:

  • SMTP = smtp.example.com
  • smtp_port = 25

Uwaga: ustawienia SMTP można uzyskać od dostawcy hostingu. Jeśli serwer wymaga uwierzytelnienia, dodaj następujące wiersze:

  • auth_username = przykładowa nazwa_użytkownika@example.com
  • auth_password = przykładowe hasło

Zapisz nowe zmiany i uruchom ponownie Apache serwer.

PHP Mail Przykład

Przyjrzyjmy się teraz przykładowi wysyłania prostego maila.

<?php
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
mail($to_email,$subject,$message,$headers);
?>

Wyjście:

Prosty Mail Transmission Protokół

Uwaga: powyższy przykład przyjmuje tylko 4 obowiązkowe parametry. Należy zastąpić powyższy fikcyjny adres e-mail prawdziwym adresem e-mail.

Dezynfekcja danych wprowadzanych przez użytkowników w wiadomościach e-mail

W powyższym przykładzie, dla uproszczenia, wykorzystano zakodowane na stałe wartości adresu e-mail i innych szczegółów w kodzie źródłowym.

Załóżmy, że musisz utworzyć formularz kontaktowy, w którym użytkownicy wpisują dane, a następnie przesyłają formularz.

  • Użytkownicy mogą przypadkowo lub celowo wstrzyknąć kod do nagłówków, co może skutkować wysyłaniem spamu.
  • Aby zabezpieczyć swój system przed takimi atakami, możesz utworzyć niestandardową funkcję, która oczyszcza i weryfikuje wartości przed wysłaniem wiadomości e-mail.

Utwórzmy funkcję niestandardową, która weryfikuje i czyści adres e-mail za pomocą wbudowanej funkcji filter_var. Funkcja filter_var służy do czyszczenia i walidacji danych wprowadzanych przez użytkownika.

Ma następującą podstawową składnię.

<?php
filter_var($field, SANITIZATION_TYPE);
?>

TUTAJ,

  • „filter_var(…)” to funkcja sprawdzania poprawności i oczyszczania
  • „$pole” to wartość pola, które ma być filtrowane.
  • „SANITIZATION_TYPE” to rodzaj dezynfekcji, która ma zostać przeprowadzona na boisku, na przykład:
    • FILTRUJ_WALIDUJ_E-MAIL – zwraca wartość true w przypadku prawidłowych adresów e-mail i false w przypadku nieprawidłowych adresów e-mail.
    • FILTRUJ_SANIZUJ_EMAIL – usuwa niedozwolone znaki z adresów e-mail, dzięki czemu adres zawierający zbędne znaki zostaje zredukowany do info@domena.com.
    • FILTRUJ_SANIZUJ_URL – usuwa nielegalne znaki z URLs, pozostawiając czysty adres, taki jak https://www.example.com.
    • FILTER_SANITIZE_STRING – usuwa znaczniki z wartości ciągu, więc „am bold” staje się „am bold”. Uwaga: ten filtr jest przestarzały w PHP 8.1; zamiast niego użyj funkcji htmlspecialchars().

Poniższy kod wykorzystuje niestandardową funkcję do wysyłania bezpiecznej poczty.

<?php
function sanitize_my_email($field) {
$field = filter_var($field, FILTER_SANITIZE_EMAIL);
if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
return true;
} else {
return false;
}
}
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
// check if the email address is invalid
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
echo "Invalid input";
} else { // send email
mail($to_email, $subject, $message, $headers);
echo "This email is sent using PHP Mail";
}
?>

Wyjście:

Dezynfekcja danych wprowadzanych przez użytkowników w wiadomościach e-mail

Zabezpiecz Mail

Wiadomości e-mail mogą zostać przechwycone w trakcie transmisji przez niepowołanych odbiorców.

Może to spowodować ujawnienie treści wiadomości e-mail nieupoważnionym odbiorcom.

Bezpieczna poczta rozwiązuje ten problem poprzez transmitwysyłanie wiadomości e-mail przez szyfrowane połączenie przy użyciu protokołu SSL lub TLS, na przykład SMTP przez SSL na porcie 465 lub STARTTLS na porcie 587.

Szyfrowanie polega na szyfrowaniu wiadomości przed jej wysłaniem, tak aby mógł ją odczytać tylko serwer pocztowy docelowego odbiorcy.

PHPMailer: Lepsza alternatywa dla mail()

W przypadku rzeczywistych aplikacji większość programistów korzysta z języka PHPMailbiblioteka er zamiast surowej funkcji mail(). PHPMailer uwierzytelnia się za pomocą zewnętrznego serwera SMTP, co znacznie poprawia dostarczalność i ułatwia wysyłanie załączników oraz wiadomości e-mail w formacie HTML.

Zainstaluj go za pomocą Composera, a następnie wysyłaj pocztę przez uwierzytelnione, szyfrowane połączenie SMTP, jak pokazano poniżej.

<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'user@example.com';
$mail->Password = 'secret';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

$mail->setFrom('noreply@example.com', 'My App');
$mail->addAddress('name@example.com');
$mail->Subject = 'Testing PHPMailer';
$mail->Body = 'This email is sent using PHPMailer over SMTP';
$mail->send();
?>

W porównaniu z mail(), PHPMailer zapewnia uwierzytelnianie SMTP, wbudowane szyfrowanie, obsługę załączników i bardziej przejrzystą obsługę błędów, dlatego jest to zalecany wybór do użytku w środowisku produkcyjnym.

FAQ

Najczęstszą przyczyną jest brak skonfigurowanego serwera poczty na komputerze lokalnym. Ustaw prawidłowe wartości SMTP w pliku php.ini lub użyj PHP.Mailer z uwierzytelnionym kontem SMTP. Sprawdź również dziennik błędów serwera i folder ze spamem.

Dodaj nagłówki ustawiające MIME-Version na 1.0 i Content-Type na text/html, a następnie umieść znacznik HTML w treści wiadomości. PHPMailer obsługuje to automatycznie, gdy ustawisz opcję isHTML(true).

Funkcja FILTER_SANITIZE_STRING jest przestarzała od wersji PHP 8.1. Użyj htmlspecialchars() do ucieczki danych wyjściowych do wyświetlenia lub konkretnego walidatora, takiego jak FILTER_VALIDATE_EMAIL, w zależności od tego, czy czyścisz, czy sprawdzasz wartość.

Tak. Podaj AI swój host SMTP, port i typ zabezpieczeń, a ona wygeneruje pełny kod PHPMailKonfiguracja z uwierzytelnianiem, nadawcą, odbiorcami i obsługą błędów. Przechowuj dane uwierzytelniające w zmiennych środowiskowych, a nie w kodzie.

Tak. Sztuczna inteligencja może udzielić porad dotyczących rekordów SPF, DKIM i DMARC, korzystania z uwierzytelnionego nadawcy SMTP, unikania słów wyzwalających spam i ustawiania prawidłowego adresu nadawcy, a następnie pomóc w testowaniu dostarczalności.

Podsumuj ten post następująco: