PHP Email · 3 min read · Oct 25, 2025

Отправка электронной почты из PHP

Отправка электронной почты из PHP

Этот учебник показывает, как вы можете легко отправлять электронные сообщения с веб-сервера, поддерживающего PHP. Это можно использовать для обработки данных форм, отправки уведомлений и т. д. Также объясняется немного о форматировании заголовков электронной почты.

Конфигурация системы

Очевидно, что вам нужно установить веб-сервер вместе с PHP. Вам также нужно убедиться, что ваша операционная система имеет установленный почтовый агент (например, Sendmail на Linux или SMTP-сервис под IIS). И убедитесь, что порт 25 не заблокирован. Это необходимо даже если вы пересылаете сообщения через второй сервер.

Функция mail в PHP включена по умолчанию. Однако вы можете указать дополнительные параметры в файле ‘php.ini’ в разделе [mail function] (строка # около 700).

Синтаксис

Вот полный синтаксис команды mail():

bool mail ( string $email_address_to, string $subject, string $message_contents [, string $additional_headers [, string $additional_parameters]] );

Первые 3 параметра не требуют объяснений: адрес электронной почты получателя, тема сообщения, содержимое сообщения. Параметр $additional_headers включает заголовки электронной почты, которые я перечислю позже. $additional_parameters используется для передачи параметров, специфичных для программы, используемой для отправки электронной почты (например, sendmail), и редко используется. Вам нужно проверить страницы man sendmail для списка параметров.

Абсолютный минимум требует от вас указать следующее:

mail ( $email_address_to , $subject, $message_contents );

Однако рекомендуется определять дополнительные заголовки по причинам соблюдения. Сообщение электронной почты должно соответствовать RFC #822.

Пример ниже показывает некоторые заголовки электронной почты, которые можно использовать:

  • From: Адрес электронной почты отправителя.
  • Reply-To: Адрес электронной почты, на который должны быть отправлены ответы.
  • Return-Path: Используется в случае, если сообщение не доставлено и должно быть возвращено.
  • Subject: Тема электронной почты.
  • CC: Копия. Список дополнительных получателей, разделенный запятыми, который будет виден всем остальным получателям.
  • BCC: Скрытая копия. Список дополнительных получателей, разделенный запятыми, который не будет виден другим получателям.
  • Content-type: Определяет MIME-тип сообщения.
  • X-Mailer: Указывает почтовый клиент, используемый для отправки сообщения.

Важно помнить, что имена заголовков чувствительны к регистру и что каждый заголовок должен заканчиваться символами return и newline.

Каждое сообщение проходит через минимум 2 почтовых сервера (отправителя и получателя). Однако может быть больше почтовых серверов на маршруте, таких как релейные серверы, антиспам-серверы и т. д. Каждый из них добавит свои собственные заголовки к вашему сообщению. Вам также нужно помнить, что ваш веб-сервер может, в зависимости от настроек, менять некоторые поля заголовков, такие как Return-Path. Обратите внимание, что это поле не влияет на адрес для ответов.

Пример

Вот простой пример, который отправит сообщение электронной почты:

Полный пример

Этот пример показывает более организованную структуру с большим количеством параметров и заголовков:

";
   $email_return_to = "[email protected]";
   $email_content_type = "text/html; charset=us-ascii";
   $email_client = "PHP/" . phpversion();
//
 ------------------------- //

// --- ОПРЕДЕЛЕНИЕ ЗАГОЛОВКОВ --- //
//
   $email_header = "From: " . $email_sender . "\r\n";
   $email_header .= "Reply-To: " . $email_return_to . "\r\n";
   $email_header .= "Return-Path: " . $email_return_to . "\r\n";
   $email_header .= "Content-type: " . $email_content_type . "\r\n";
   $email_header .= "X-Mailer: " . $email_client . "\r\n";
//
 ---------------------- //

// --- ТЕМА И СОДЕРЖИМОЕ --- //
//
   $email_subject = "Тема тестового письма";
   $email_contents = "";
   $email_contents .= "

Тестовое письмо

"; $email_contents .= "
Отправитель: " . $email_sender; $email_contents .= "
Получатель: " . $email_recipient; $email_contents .= ""; // ---------------------------- // $email_result = mail($email_recipient, $email_subject, $email_contents, $email_header); if ($email_result) echo "Письмо отправлено!"; else echo "Ошибка при отправке письма!"; ?>
  • Примечание: Реализация mail() в Windows отличается во многих отношениях от реализации в Unix. Во-первых, она не использует локальный бинарный файл для составления сообщений, а только работает с прямыми сокетами, что означает, что требуется MTA, слушающий на сетевом сокете (который может находиться как на локальном хосте, так и на удаленной машине). Во-вторых, пользовательские заголовки, такие как From:, Cc:, Bcc: и Date:, не интерпретируются MTA в первую очередь, а разбираются PHP. Таким образом, параметр to не должен быть адресом в форме “Что-то < [email protected] >”. Команда mail может неправильно разобрать это при взаимодействии с MTA.
  • Примечание: Стоит упомянуть, что функция mail() не подходит для больших объемов электронной почты в цикле. Эта функция открывает и закрывает сокет SMTP для каждой электронной почты, что не очень эффективно.
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.