Опубликован: 08.05.2007 | Доступ: свободный | Студентов: 12882 / 3013 | Оценка: 4.13 / 3.77 | Длительность: 12:58:00
Лекция 12:

Отправка E-mail

Аннотация: Эта лекция описывает, как использовать службы SMTP для отправки автоматических сообщений e-mail из приложений PHP

Этот раздел описывает, как использовать службы 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. Выполните следующие действия.

  1. Откройте инструменты администрирования IIS
  2. Остановите используемую по умолчанию службу виртуального сервера SMTP.
  3. Откройте окно свойств используемого по умолчанию виртуального сервера SMTP.
  4. Щелкните на вкладке "Access" и нажмите кнопку "Relay...".
  5. Нажмите кнопку "Only the list below" и добавьте один компьютер с IP-адресом 127.0.0.1.
  6. Нажмите кнопку "OK", чтобы закрыть окно вкладок и свойств "Access".
  7. Перезапустите используемую по умолчанию службу виртуального сервера SMTP.

Необходимо также сделать следующие изменения в конфигурационном файле PHPphp.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(). Скалярные переменные передают функции необходимые параметры.

Максим Матросов
Максим Матросов
Наталья Джабасова
Наталья Джабасова