Курс PHP для начинающих - с нуля до джуниора за 2 месяца. Жми!
base22 8

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

Курс PHP для начинающих
Внимание! Данный курс устарел!
Переходите к новому курсу "PHP для начинающих".

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

Курс PHP для начинающих

Настройка конфигурации Windows

В операционной системе Windows необходимо задать в файле php.ini значения двух переменных:

SMTP

Строка, содержащая имя DNS или IP-адрес сервера SMTP, который перенаправляет почту, получаемую от компьютера под управлением Windows, на котором установлена система PHP. Если сервер SMTP находится на том же компьютере, где установлена система PHP, то в качестве значения параметра SMTP необходимо указать localhost.

sendmail_from

Строка, содержащая адрес электронной почты, применяемого по умолчанию отправителя почты PHP (например, mailbot@example.com).

В программное обеспечение сервера IIS4 и последующих версий встроен сервер SMTP, который обладает меньшим набором функций, чем Exchange Server. С этим сервером SMTP удобнее работать, если вам не требуется вся мощь программы Exchange Server.

Курс PHP для начинающих

Настройка конфигурации Linux

Если система PHP эксплуатируется на компьютере с операционной системой семейства Unix, то необходимо проверить и, возможно, откорректировать значение одной переменной в файле php.ini. Речь идет о переменной sendmail_path, которая представляет собой строковое значение, содержащее полное обозначение пути к программе sendmail (обычно /usr/sbin/sendmail или /usr/lib/sendmail), к заменяющей ее программе или к программной оболочке (такой как /var/qmail/bin/sendmail).

Курс PHP для начинающих

Функция mail

Для отправки электронной почты в языке PHP главным образом применяется функция mail(), которая, возвращая булево значение, предпринимает попытку отправить одно сообщение, используя данные, приведенные в круглых скобках. Ниже показан простейший способ применения этой функции (следует учитывать, что указанный здесь адрес является фиктивным и не должен использоваться в целях проверки):

Код PHP
<?php

mail('mymail@example.com', 'Заголовок сообщения',
     'Привет!\r\nТестируем отправку электронной почты с помощью PHP');

?>

Здесь показан применяемый по умолчанию и минимальный формат: адрес получателя, строка темы и тело письма. В данном случае интерпретатор PHP автоматически добавляет строку From: me@sendhost к заголовку каждого сообщения.

Если письмо должно быть направлено нескольким получателям, то адреса всех получателей должны быть перечислены в поле адреса и разделены запятыми (такая возможность не поддерживается всеми агентами MTA):

Код PHP
mail('mymail1@example.com, mymail2@example.com, mymail3@example.com', 
     'Заголовок сообщения',
     'Привет!\r\nТестируем отправку электронной почты с помощью PHP');

Многие пользователи стремятся получить больший контроль над тем, как представлены адреса и какой внешний вид и формат имеет отправляемая ими электронная почта. Этой цели можно добиться, поместив дополнительный заголовок после трех применяемых по умолчанию заголовков, как показано ниже:

Код PHP
$address1 = 'mymail1@example.com';
$address2 = 'mymail2@example.com';
$address3 = 'mymail3@example.com';
$subject = 'Заголовок сообщения';
$body = 'Привет!\r\nТестируем отправку электронной почты с помощью PHP';
$headers = "From: me@sendhost\n\nbcc
:phb@sendhost\r\nContent-type: text/plain\r\nX-mailer: PHP/".phpversion();

mail("$address1, $address2, $address3", $subject, $body, $headers);

Этот параметр с дополнительными заголовками, предусмотренный в функции mail, является немного необычным, поскольку позволяет включать данные нескольких типов, для представления которых обычно используются отдельные поля. Мы не собираемся разбирать причины, по которым был предусмотрен этот параметр, поэтому ниже описано лишь назначение элементов, которые могут быть заданы в этом параметре:

  • Имя отправителя.

  • Поле "To" (адрес получателя).

  • Адрес электронной почты отправителя.

  • Адрес "Reply-to" (Получатель ответа) или "Bounce-to" (Получатель отвергнутого письма).

  • Поле "X-mailer" и номер версии.

  • Версия MIME.

  • Тип информационного наполнения.

  • Обозначение набора символов (в этом поле для обозначения операции присваивания используется символ =, а не :, как в других заголовках).

  • Поле "Content-transfer-encoding".

  • Поле с обозначением адресата копии (cc) и слепой копии (bcc).

Функция mail() возвращает 1 (значение true), если в системе PHP все указывает на то, что почта была отправлена успешно. Это отнюдь не означает, что действительно была отправлена или получена какая-либо почта. Все причины, по которым передача почты может окончиться неудачей, просто невозможно перечислить: неправильно заданный почтовый адрес, неправильно назначенный или имеющий неправильную конфигурацию сервер SMTP, неблагоприятные условия, сложившиеся на локальном участке Интернета, и т.д. Получение результата, равного 1, следует рассматривать как сообщение, означающее не больше чем: "Применение интерпретатором PHP функции mail к входным данным не закончилось неудачей".

Курс PHP для начинающих

Отправка почты из формы

По-видимому, одной из наиболее распространенных областей применения функции mail() языка PHP является отправка почты из формы. Такой вариант предоставляет значительно более широкие функциональные возможности по сравнению с дескриптором ссылки mailto языка HTML, использование которого, безусловно, приводит к отправке электронной почты из почтовой программы клиентского компьютера. Ниже приведен простой пример формы такого типа, который часто применяется для отправки электронной почты:

Код PHP
<?php
    // Простая обработка формы
    if (!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message']))
    {
        extract($_POST, EXTR_PREFIX_ALL, 'tomail');
        
        if (filter_var($tomail_email, FILTER_VALIDATE_EMAIL))
        {
            $text = "Был выполнен запрос с сайта example.com\n\n\"$tomail_message\"\n\nОт: $tomail_name, $tomail_email";
            $headers = "From: admin@example.com\r\nX-Mailer:Стандартный PHP-скрипт";
            mail('my_email@gmail.com', 'Запрос с сайта example.com', $text, $headers);
        }
    }
    else $tomail_name = '';
            
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Основы PHP</title>
</head>
<body>
<h1>Контакты</h1>
<form method="post">
    <p>
        <label>Имя</label>
        <input name="name" type="text">
    </p>
    <p>
        <label>Email</label>
        <input name="email" type="text">
    </p>
    <p>
        <label style="vertical-align:top">Сообщение</label>
        <textarea name="message" rows="10" cols="30"></textarea>
    </p>
    <input type="submit" value="Отправить">
</form>
</body>
</html>

При использовании любых переменных $_POST в связи с отправкой почты необходимо в первую очередь учитывать возможные отрицательные последствия с точки зрения безопасности. Недобросовестные лица могут использовать эту форму для рассылки спама. В частности, взломщик получает возможность оформить некоторое сообщение в виде значения переменных суперглобального массива $_POST, которые затем вставляются в сообщение. В данном примере я опустил дополнительные проверки и обеззараживание введенных данных для простоты примера, более подробную информацию вы можете найти в статье "Безопасность в PHP".

PHP и XML
Создание графики

Комментарии (0)

Результаты поиска по запросу

Система Orphus