Введение в программирование на PHP5

Отправка 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(). Скалярные переменные передают функции необходимые параметры.

    Вернуться к учебному плану