Отправка E-mail
Этот раздел описывает, как использовать службы SMTP для отправки автоматических сообщений e-mail из приложений PHP. E-mail посылается с сервера Web через его службу простого протокола пересылки почты SMTP. Как и предполагает название, это ограниченная в возможностях служба e-mail, однако ее достаточно для создания автоматических сообщений e-mail. Необходимо отметить, что требуется сервер SMTP, чтобы можно было воспользоваться функциями e-mail в PHP. В операционных системах XP Professional, Windows 2000 server и Windows 2003 server службы SMTP объединены с информационными службами Интернет (IIS). В Linux/Unix популярными пакетами SMTP являются Sendmail и Qmail.
При выполнении PHP на сервере с помощью служб SMTP IIS, может понадобиться сконфигурировать его, чтобы разрешить пересылку сообщений e-mail. Выполните следующие действия.
- Откройте инструменты администрирования IIS
- Остановите используемую по умолчанию службу виртуального сервера SMTP.
- Откройте окно свойств используемого по умолчанию виртуального сервера SMTP.
- Щелкните на вкладке "Access" и нажмите кнопку "Relay...".
- Нажмите кнопку "Only the list below" и добавьте один компьютер с IP-адресом 127.0.0.1.
- Нажмите кнопку "OK", чтобы закрыть окно вкладок и свойств "Access".
- Перезапустите используемую по умолчанию службу виртуального сервера SMTP.
Необходимо также сделать следующие изменения в конфигурационном файле PHP — php.ini – чтобы система PHP могла использовать службы SMTP. Откройте файл php.ini с помощью текстового редактора и найдите следующие строки:
[mail function] ;For Win32 only SMTP = localhost ;For Win 32 only sendmail_from = me@localhost.com
Необходимо изменить директиву SMTP, чтобы она указывала на используемый сервер SMTP. Если используются локальные службы SMTP, то это значение должно быть задано как localhost. Вторая директива sendmail_from является адресом email, применяемым в заголовке From исходящей почты e-mail. Должна быть задана действительная учетная запись e-mail, если пользователям будет разрешено отвечать на автоматически создаваемые сообщения e-mail.
В PHP имеется функция mail() для отправки e-mail. Эта функция определена ниже:
mail(string_to, string_subject, string_message,string_additional_headers) – позволяет посылать сообщение e-mail. Возвращает true, если сообщение успешно послано, иначе возвращается значение false.
Следующий пример демонстрирует использование функции mail():
<?php $to = 'youraddress@domain.com'; $subject = 'PHP Mail'; $msg = 'hello'; $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $msg, $headers); ?>
Первый шаг состоит в создании переменной для хранения адреса e-mail, куда будет послано сообщение:
$to ="youraddress@domain.com";
Это может быть любой действительный адрес e-mail. Несколько адресов e-mail должны разделяться запятой ",".
Переменная $subject содержит тему сообщения e-mail. Эта строка появится в строке subject (тема) сообщения.
$subject="PHP Mail";
Основное содержание тела сообщения e-mail присваивается переменной $msg. Если потребуется, то можно соединять несколько переменных $msg вместе. Это часто бывает нужно, когда посылается длинное описательное сообщение.
$msg = "Сообщение, созданное с помощью функции PHP mail().";
Затем создаются заголовки e-mail и присваиваются переменной $headers. Заголовки e-mail являются строками в начале сообщений e-mail, которые определяют их структуру и делают их, по сути, действительными почтовыми адресами. Хотя функция mail() может использоваться без заголовков, рекомендуется включать заголовки "From:" и "Reply-To:"
$headers = "From: My Web Site <myaddress@mydomain.com>"; $headers .= "Reply-To: myaddress@mydomain.com";
Наконец, вызывается функция mail() для отправки сообщения:
mail($to,$subject,$msg, $headers);
В большинстве случаев параметры to, subject, и message функции mail() не кодируются жестким образом, как показано в предыдущем примере. Вместо этого они подставляются динамически в результате ввода пользователя. Например, рассмотрим страницу, которая позволяет пользователю электронным образом регистрироваться для получения товара или услуги. Пользователь вводит имя, фамилию, адрес e-mail, и номер телефона. Эта информация передается на страницу PHP, которая анализирует информацию и посылает пользователю подтверждающее сообщение e-mail. Следующий пример демонстрирует этот процесс:
<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Страница Web </title> </head> <body> <h3> Страница регистрации </h3> <form name="registration" method="post" action="email.php"> First Name: <input type="text" name="fname"/> Last Name: <input type="text" name="lname"/> Email Address: <input type="text" name="email"/> Telephone: <input type="text" name="telephone"/> <input type="submit" name="Submit Registration"/> </form> </body> </html>
Страница registration.htm является стандартной страницей формы XHTML, которая позволяет пользователю вводить имя, фамилию, адрес e-mail и номер телефона. Когда нажимается кнопка "Submit Registration", данные формы передаются на страницу PHP email.php как переменные PHP $_POST[]:
$_POST['fname'] – содержит имя пользователя
$_POST['lname'] – содержит фамилию пользователя
$_POST['email'] – содержит адрес e-mail пользователя
$_POST['telephone'] – содержит номер телефона пользователя
Следующий сценарий показывает, как информация формы анализируется и используется функцией mail():
<?php $to = $_POST[email]; $subject = "Подтверждение регистрации"; $msg = "Дорогой: " . $_POST[fname] . " " . $_POST[lname] . ",\n\n"; $msg .= "Вы успешно зарегистрировались."; $headers = "From: Registration Site <myaddress@mydomain.com>"; $headers .= "Reply-To: registration@mydomain.com"; mail($to, $subject, $msg, $headers); ?>
Страница email.php получает значения из суперглобального массива $_POST[] (содержащего значение, отправленные из registration.htm) и присваивает их скалярным переменным, с которыми будет проще работать. Затем создаются заголовки e-mail и вызывается функция mail(). Скалярные переменные передают функции необходимые параметры.