(краткое содержание)
Формат email
Перед рассмотрением возможностей отправки email с помощью средств PHP,
стоит понять, что такое электронное письмо.
Структура любого электронного письма представляет собой следующий вид:
Заголовок_1\r\n
Заголовок_2\r\n
…
Заголовок_N\r\n
Тело_письма\r\n
Символы \r\n, как Вы помните из предыдущих лекций – символы переноса на
новую строку. Сейчас большинство почтовых программ поддерживают как двойной
символ \r\n, так и одинарный \n, но все же стандарты рекомендуют использовать
именно сочетание \r\n.
Таким образом, сочетая ряд заголовков и текст в теле письма, который, к
слову, может содержать не только непосредственно текст, но и HTML-разметку,
сценарии PHP, JS и многое другое, можно создать красивые интерактивные
письма, которые будут нести в себе массу полезной для получателя информации.
Рассмотрим некоторые заголовки, которые могут встретиться в электронном
письме:
- Date: - дата и время отправки сообщения, пример формата “Mon, 15 Jan 2019
21:20:32 +0300 (MSK/MSD)”;
- From: - адрес отправителя письма;
- To: - адрес получателя (может содержать несколько адресов);
- Content-type: - MIME-тип тела письма (чаще всего указывается text/plain);
- Cc: - адресация копий, которая указывает дополнительных получателей
письма (разница между To и Cc в восприятии некоторыми почтовыми программами,
добавляющими в тело сообщения текст о том, что пересылаемое письмо является
копией);
- Received: – штамп прохождения письма через почтовый сервер, который
позволяет отследить реальный путь письма в случаях, когда отправитель хочет
скрыть источник отправки (спаммеры, мошенники и др.);
- Message-Id: - уникальный идентификатор почтового сообщения,
присваиваемый сообщению после прохождения через первый из почтовых
серверов;
- Bcc: - скрытая копия (другие получатели не видят в теле письма получателей
из этого заголовка;
- Subject: - тема письма (наличие символов Re: подразумевает факт пересылки
данного сообщения от изначально другого отправителя);
- Reply-To: - адрес для ответов (в случаях рассылки спама, часто указывается
ложный почтовый адрес для отсылки ответов на него);
- In-Reply-To: - указывает на тип сообщения «ответ на ответ»;
- Comments: - комментарий, который может содержать различную
дополнительную информацию (часто используется в недобросовестных
намерениях отправителями спама, мошенниками и др.);
- Status: - статус письма (новое, прочитанное и др.).
1
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
Отправка письма
Для отправки писем в PHP используется функция mail():
bool mail(string $to, string $subject, string $message [, mixed $headers, string
$parameters])
Функция содержит следующие параметры:
- $to – адрес получателя;
- $subject – тема сообщения;
- $message – текст сообщения;
- $headers – дополнительные заголовки почтовых сообщений, рассмотренные
в этой лекции;
- $parameters – дополнительные параметры почтовых сообщений, которые
могут использоваться для передачи дополнительных аргументов командной строки
для почтовых программ.
Рассмотрим возможности отправки почтовых сообщений в листинге 41.1.
Листинг 41.1. Отправка электронной почты функцией mail()
<head>
<meta charset="UTF-8">
<title>Форма отправки email</title>
</head>
<body>
<?php
if($_POST['submit']) {
echo "
<b>Уважаемый {$_POST['name']}, благодарим Вас за обращение в службу
технической поддержки нашего сервиса!</b>
<p>Наши специалисты свяжутся с Вами по указанному email:
{$_POST['email']} в ближайшее время</p>";
} elseif($_POST['submit'] && (!$_POST['name'] || !$_POST['email'] ||
!$_POST['subject'] || !$_POST['message'])) {
echo "
<b>Вы не заполнили, либо заполнили некорректно поля отправки
сообщения!</b>
2
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
?>
<?php
$email = "support@support.com";
$subject = "Отправитель: ".$_POST['name'].". Обращение в службу
тех.поддержки по теме: ".$_POST['subject'];
$headers = "From: ".$_POST['email']."\r\n";
3
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)
</body>
</html>
В данном листинге Вы видите подробное рассмотрение принципов действия
функции mail(). Учитывая, что работа производится на локальном сервере, письмо
отправляется не на почтовый адрес, а помещается в текстовом виде в папке
userdata\temp\email папки размещения OpenServer и может принимать следующий
вид:
To: support@support.com
Subject: Отправитель: Иван Иванов. Обращение в службу тех.поддержки по теме:
Тема сообщения
X-PHP-Originating-Script: 0:Listing_41.1.php
From: example@exam.com
Безопасность сообщений
В этой лекции Вы рассмотрели листинг, который показывает способ отправки
сообщения электронной почтой.
Стоит остановиться на некоторых моментах, связанных с безопасностью
отправки сообщений и обработкой пользовательских данных в целом.
Настоятельно не рекомендуется применять вышеуказанный листинг в
качестве практического примера, т. к. он не учитывает ряда особенностей, а
именно, не обрабатывает входящие пользовательские данные.
Для этого существуют способы, называемые фильтрацией данных, которые
будут рассмотрены в разделе 5 настоящего курса, посвященного фильтрации. Так,
для примера из листинга 41.1 стоит использовать такие функции, как, например,
htmlsecialchars(), которая обрабатывает входящую строку и форматирует символы,
подобные «<», «>» и другие, используемые в скриптах. Это необходимо, чтобы
исключить так называемые инъекции, когда недобросовестный пользователь
может в теле сообщения передать скрипт, который может нанести вред серверу и
другим пользователям.