Как отправить электронное письмо с помощью функции PHP mail()

⚡ Умное резюме

Функция `mail` в PHP — это встроенная функция, которая отправляет электронные письма непосредственно из PHP-скрипта, используя настройки SMTP сервера. В этом пошаговом руководстве рассматриваются синтаксис и параметры функции `mail()`, настройка SMTP в файле `php.ini`, проверка пользовательского ввода с помощью `filter_var`, отправка защищенных писем и использование PHP.Mailдля надежной доставки.

  • ???? Что делает функция mail(): Функция mail() отправляет электронное письмо из скрипта, получая получателя, тему, сообщение и необязательные заголовки.
  • 📨 Транспорт SMTP: PHP-почта использует протокол SMTP, хост, порт и аутентификация которого задаются в конфигурационном файле php.ini.
  • 📋 CC и BCC: Дополнительные заголовки позволяют добавить получателей копии и скрытой копии, при этом получатель BCC скрыт от остальных получателей.
  • 🛡️ Очистка входных данных: Переменные filter_var с параметрами FILTER_SANITIZE_EMAIL и FILTER_VALIDATE_EMAIL блокируют внедрение заголовка из поля ввода контактной формы.
  • 🔒 Безопасный Mail: Шифрование соединения с использованием SSL или TLS защищает содержимое сообщений от прочтения во время передачи.
  • 🧰 Использовать PHPMailэр: PHPMailer добавляет аутентификацию SMTP, возможность вложения файлов и отправку писем в формате HTML, что делает его более надежным, чем raw mail().
  • 🤖 AI-помощь: Инструменты искусственного интеллекта могут настраивать PHP.MailСпециалист по SMTP и предложит решения, которые предотвратят попадание ваших писем в папку «Спам».

PHP Mail

Что такое почта PHP?

Функция `php mail` — это встроенная функция PHP, используемая для отправки электронных писем из PHP-скриптов.

Функция почты принимает следующие параметры:

  • Email
  • Тема
  • Сообщение
  • Адреса электронной почты для копий (CC) или скрытых копий (BCC).

Почему и когда использовать PHP mail

Функция отправки почты полезна во многих ситуациях:

  • Это экономически эффективный способ оповещения пользователей о важных событиях.
  • Позвольте пользователям связываться с вами по электронной почте, предоставив форму обратной связи на веб-сайте, который отправляет предоставленный контент по электронной почте.
  • Разработчики могут использовать его для получения системных ошибок по электронной почте.
  • Вы можете использовать его для отправки электронных писем подписчикам новостной рассылки.
  • Вы можете использовать его для отправки ссылок для сброса пароля пользователям, которые забыли свои пароли.
  • Его можно использовать для отправки по электронной почте ссылок для активации и подтверждения. Это полезно при регистрации пользователей и проверке их адресов электронной почты.

Отправка почты с помощью PHP

Функция отправки почты в PHP имеет следующий базовый синтаксис.

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

ВОТ,

  • «$to_email_address» — адрес электронной почты получателя почты.
  • «$subject» — тема электронного письма.
  • «$message» — это сообщение, которое необходимо отправить.
  • Параметр “[$headers]” является необязательным; его можно использовать для указания такой информации, как CC и BCC.
    • CC — это аббревиатура от Carbon Copy (копия). Она используется, когда вы хотите отправить копию заинтересованному лицу, например, электронное письмо с жалобой, отправленное в компанию, также может быть отправлено в качестве копии в комиссию по рассмотрению жалоб.
    • BCC — это аббревиатура от blind carbon copy (скрытая копия). Она похожа на CC, но адреса электронной почты, указанные в разделе BCC, не отображаются другим получателям.

Простой Mail Transmission Протокол (SMTP)

PHP mail использует Simple Mail Transmission Протокол (SMTP) для отправки почты.

На хостинговом сервере настройки SMTP уже должны быть заданы.

Настройки SMTP-почты можно задать в файле «php.ini», расположенном в папке установки PHP.

Чтобы настроить параметры SMTP на вашем локальном компьютере, предположим, что вы используете XAMPP. WindowsНайдите файл “php.ini” в каталоге “C:\xampp\php”.

  • Откройте его с помощью Блокнота или любого текстового редактора. В этом примере мы будем использовать Блокнот. Щелкните меню «Правка».

Простой Mail Transmission протокол

  • Нажмите на меню «Найти…».

Простой Mail Transmission протокол

  • Откроется диалоговое окно «Поиск».

Простой Mail Transmission протокол

  • Нажмите кнопку «Найти далее».

Простой Mail Transmission протокол

Найдите записи в разделе [функция почты]. Строки по умолчанию обычно выглядят так:

  • ; SMTP = локальный хост
  • ; smtp_port = 25

Удалите точки с запятой перед SMTP и smtp_port и установите SMTP на ваше значение. SMTP сервер и укажите порт, соответствующий вашему SMTP-порту. Ваши настройки должны выглядеть следующим образом:

  • SMTP = smtp.example.com
  • смтп_порт = 25

Примечание: настройки SMTP можно получить у вашего хостинг-провайдера. Если сервер требует аутентификации, добавьте следующие строки:

  • auth_username = example_username@example.com
  • auth_password = пример_пароля

Сохраните изменения и перезапустите программу. Apache сервера.

PHP Mail Пример

Рассмотрим теперь пример отправки простого электронного письма.

<?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);
?>

Выход:

Простой Mail Transmission протокол

Примечание: в приведенном выше примере используются только 4 обязательных параметра. Вам следует заменить указанный выше вымышленный адрес электронной почты на реальный.

Очистка вводимых пользователем адресов электронной почты

В приведенном выше примере для простоты используются жестко закодированные значения в исходном коде для адреса электронной почты и других сведений.

Предположим, вам нужно создать форму обратной связи, в которую пользователи будут вводить свои данные, а затем отправлять форму.

  • Пользователи могут случайно или намеренно внедрять код в заголовки, что может привести к рассылке спама.
  • Чтобы защитить свою систему от таких атак, вы можете создать пользовательскую функцию, которая очищает и проверяет значения перед отправкой почты.

Давайте создадим пользовательскую функцию, которая проверяет и очищает адрес электронной почты с помощью встроенной функции filter_var. Функция filter_var используется для очистки и проверки данных, введенных пользователем.

Он имеет следующий базовый синтаксис.

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

ВОТ,

  • «filter_var(…)» — функция проверки и очистки.
  • «$field» — это значение поля, подлежащего фильтрации.
  • «SANITIZATION_TYPE» — это тип дезинфекции, которая будет выполнена на объекте, например:
    • FILTER_VALIDATE_EMAIL – возвращает true для действительных адресов электронной почты и false для недействительных адресов электронной почты.
    • FILTER_SANITIZE_EMAIL – удаляет недопустимые символы из адресов электронной почты, поэтому адрес с лишними символами преобразуется в info@domain.com.
    • ФИЛЬТР_ДЕЗИНФИЦИРУЙТЕ_URL – удаляет недопустимые символы из URLоставляя корректный адрес, например, https://www.example.com.
    • FILTER_SANITIZE_STRING – удаляет теги из строковых значений, поэтому am bold становится am bold. Обратите внимание, что этот фильтр устарел в PHP 8.1; используйте вместо него htmlspecialchars().

Приведённый ниже код использует пользовательскую функцию для отправки защищённых электронных писем.

<?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";
}
?>

Выход:

Очистка вводимых пользователем адресов электронной почты

Безопасный Mail

Электронные письма могут быть перехвачены во время передачи непреднамеренными получателями.

Это может привести к тому, что содержимое электронного письма станет доступно непреднамеренным получателям.

Защищенная почта решает эту проблему следующим образом: transmitотправка электронных писем по зашифрованному соединению с использованием SSL или TLS, например, SMTP через SSL на порту 465 или STARTTLS на порту 587.

Шифрование кодирует сообщение перед отправкой, поэтому прочитать его сможет только почтовый сервер адресата.

PHPMailer: Лучшая альтернатива mail()

Для реальных приложений большинство разработчиков используют PHP.MailИспользуйте библиотеку `er` вместо функции `raw mail()`. PHPMailСистема выполняет аутентификацию на внешнем SMTP-сервере, что значительно повышает доставляемость писем и упрощает отправку вложений и HTML-писем.

Установите его с помощью Composer, затем отправляйте почту через аутентифицированное, зашифрованное SMTP-соединение, как показано ниже.

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

По сравнению с функцией mail(), PHPMailer предоставляет аутентификацию SMTP, встроенное шифрование, поддержку вложений и более понятную обработку ошибок, поэтому он является рекомендуемым выбором для почтовой рассылки в рабочих целях.

Часто задаваемые вопросы (FAQ)

Наиболее распространенная причина — отсутствие настроенного почтового сервера на локальном компьютере. Установите правильные значения SMTP в файле php.ini или используйте PHP.MailИспользуйте для аутентификации учетную запись SMTP. Также проверьте журнал ошибок сервера и папку со спамом.

Добавьте заголовки, устанавливающие MIME-Version равным 1.0 и Content-Type равным text/html, затем вставьте HTML-разметку в тело сообщения. PHPMailer обрабатывает это автоматически, если вы установите для него параметр isHTML(true).

Функция FILTER_SANITIZE_STRING устарела начиная с PHP 8.1. Используйте htmlspecialchars() для экранирования вывода или специальный валидатор, например FILTER_VALIDATE_EMAIL, в зависимости от того, очищаете вы значение или проверяете его.

Да. Укажите ИИ ваш SMTP-хост, порт и тип безопасности, и он сможет сгенерировать полный PHP-код.MailНастройка включает аутентификацию, отправителя, получателей и обработку ошибок. Храните учетные данные в переменных среды, а не в коде.

Да. Искусственный интеллект может дать рекомендации по записям SPF, DKIM и DMARC, использованию аутентифицированного отправителя SMTP, предотвращению использования ключевых слов, запускающих спам, и установке действительного адреса отправителя, а затем помочь вам проверить возможность доставки.

Подведем итог этой публикации следующим образом: