Часто средствами PHP необходимо отправлять почту. Но как это сделать, чтобы письма приходили на максимально возможное количество разных почтовых систем?
На самом деле все очень просто, особенно, если ты знаешь где нажимать какие кнопочки. Но, чтобы найти действительно подходящее решение в данном вопросе, пришлось потратить много времени... А все мы помним, что время – это деньги!
Итак, приступим. Код письма может быть даже таким:
<?php
$date = date("Y-m-d H:i:s");
//email на который отправляем
$to = "<mailZero@inverser.pro>";
//тема сообщения
$subject = "Новое сообщение. $date";
//как бы текст
$message = '<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<head>
<body>
<p>Текст письма</p>
</body>
</html>';
//headers
$headers = 'Content-type: text/html; charset="utf-8"';
$headers .= "From: ИМЯ <ВАШ_EMAIL@mail.bo>";
$headers .= "Reply-To: <EMAIL_АДРЕССАТА>";
mail($to, $subject, $message, $headers);
?>
Отправитель.
Важно понимать, что часть кода headres имеет очень важное значение. Т.к., например, mail.ru НЕ принимает письма, если Вы указываете автора письма (From), ненастоящего.
Т.е., например, Вы имеете сайт на сервере host.bo, при этом Mail.Ru знает, что письмо пришло оттуда, т.к. при отсылке письма отправляет еще и дополнительная информация, а не только та, которую Вы укажите.
Например:
Return-path: <mailZero@inverser.pro>
Envelope-to: mailZero@inverser.pro
Delivery-date: Mon, 16 Oct 2017 16:42:03 +0300
Received: from user by thehost.ua with local (Exim 666)
(envelope-from <mailZero@inverser.pro>)
id 56565-0580J2-1d
for mailZero@inverser.pro; Mon, 16 Oct 2017 16:42:02 +0300
To: <mailZero@inverser.pro>
Subject: 2017-10-16 16:42:01 комментарий Inverser.PRO
X-PHP-Originating-Script: 1708:script.php
Content-type: text/html; charset=utf-8
From: <mailZero@inverser.pro>
Reply-To: <mailZero@inverser.pro>
Message-Id: <56565-0580J2-1d@thehost.ua>
Date: Mon, 16 Oct 2017 16:42:02 +0300
<p><strong>NAME</strong>: Inverser.<br />
<hr /><strong>EMAIL</strong>: mailZero@inverser.pro<br />
<hr /><strong>IP</strong>: 1.0.1.9<br />
<hr /><strong>DATE</strong>: 2017-10-16 16:42:01<br />
<hr /><strong>URL</strong>: <a href="http://inverser.pro/42">inverser.pro/42</a><br />
<hr /><strong>TEXT</strong>: Андрей, не знаю, кто такой Лукас, но благодарю, видимо, что-то хорошее.
</p>
Поэтому, если, например, Вы укажите отправителем почту mail@mail.ru, то почтовая система Mail.Ru НЕ примет это письмо, так как будет «знать», что оно пришло не с её серверов, а с сервера host.bo.
Именно поэтому, автора письма нужно указывать любого другого, но не mail.ru.
Следующий параметр – кодировка.
Чтобы не было «кракозябр» или нечитаемых символов в письме, необходимо четко соблюсти правила.
Строка
$headers = 'Content-type: text/html; charset="utf-8"';
должна быть именно ТАКОЙ, и никакой другой, если только Вы не используете другую кодировку (charset). Важную роль играют одинарные и двойные кавычки в этой строке. Желательно, чтобы она была именно такой, как указана выше, чтобы не было непонятных символов в письме:
Если в письме НЕ будет html тегов, а просто текст, то можно эту строку писать так:
$headers = 'Content-type: text/plain; charset="utf-8"';