базовый курс

ГРУППА КУРСА

Отправка почты

SMTP сервер

В PHP существует возможность автоматически свормировать и отправить имэйл на один или несколько адресов. Для этого требуется наличие SMTP-сервера. На платном хостинге он обычно есть, а на бесплатном может не быть. В OpenServer есть эмитация SMTP-сервера. Письма не отправляются, а сохраняются в определённую папку. Это позволяет посмотреть, как работают скрипты, отправляющие почту.

Отправка письма

Функция mail() отправляет письмо по указанным адресам.

mail (получатели, тема, текст письма, заголовки)

Параметры:

получатели - один или несколько адресов, на которые отправляется письмо

тема - тема письма

текст письма - текст письма, разделённый на строки

заголовки - заголовки, устанавливающие дополнительные параметры

В случае удачной отправки функция возвращает true. Это означает, что письмо передано сереверу, но не означает, что оно доставлено получателям.

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

oleg@yandex.ru

<anna@yandex.ru>

C адресом можно указать имя:

Анна <anna@yandex.ru>

Текст письма должен быть разделён на строки, каждая не длиннее 70 символов. Строки разделяются символом перевода строки.

В письме могут неправильно отображаться русские буквы. Ситуацию исправляет установка в заголовках Content-Type с указанием кодировки.

Создадим скрипт, отправляющий письмо:

+
1
2
<?php
header('Content-type: text/html; charset=utf-8');
3
4
5
6
$mesage = "Первая строка письма \r\n Вторая строка письма";
$send = mail('<oleg@mail.ru>', 'Тема письма', $mesage);
if ($send)
echo 'Письмо отправлено';

Если Вы используете OpenServer, то письмо должно находиться в следующей папке:

OSPanel/userdata/temp/email

Запустите предложенный скрипт. Он должен вывести сообщение "Письмо отправлено". Откройте указанную папку. В ней должен находиться текстовый файл, содержащий сообщение и другие параметры полученного письма.

Желательно в заголовке From указать отправителя. При отсутсвии указания существует большая вероятность того, что письмо попадёт в папку со спамом.

Если заголовков несколько, то они разделяются символом перевода строки.

Добавим в скрипт ещё одну отправку, но в более сложном виде. Текст оставим тот же самый:

7
8
9
10
11
$to='<oleg@yandex.ru>, <anna@yandex.ru>';
$headers='From: <viktor@example.ru>';
$send = mail($to, 'Тема письма', $mesage, $headers);
if ($send)
echo 'Письма отправлены';