Как отправить емейл и не попасть в СПАМ. Несколько советов и mail-tester.com



  1. Самым простым вариантом отправить почту является php функция mail(), но без правильных заголовков (четвертый аргумент) мы почти гарантированно попадаем в спам.
    Поэтому нужно обязательно добавлять в заголовки:

    $headers = "Date: ".date("D, d M Y H:i:s")." UT\r\n";

    $headers.= "MIME-Version: 1.0\r\n";

    $headers.= "Content-Type: text/html; charset=\"UTF-8\"\r\n";

    $headers.= "Content-Transfer-Encoding: 8bit\r\n";

    $headers.= "From: =?UTF-8?B?".base64_encode(“ВАСЯ ПУПКИН“)."?= <".“vp@mail.ru“.">\r\n";

    Заголовки x-priority и X-Mailer — указывать не стоит.
    Заголовок: subject – нельзя.

    Тему передавать правильно следующим кодом:
    $subject = "=?UTF-8?B?".base64_encode($this->subject)."?=";

    mail($this->mail_target, $subject , $message, $headers);

    После чего письма должны доходить и попадать во входящие

  2. Проверьте что возвращает фунция mail() - возможно она заблокирована хостером и возвращает false. То есть если FALSE – значит однозначно заблокировал хостер и нужно с ним решать проблему.
    К
    стати, если функция возвращает true – не факт что идет отправка. Хостер может заблокировать вам порт (обычно 25), особенно для DS и VDS.

  3. HTML формат писем
    Если отправляются в формате html, то письмо

  4. Заголовок ОТ КОГО — очень важная штука!

    Указывать @mail.ru или @gmail.com – бесполезно, SPF и DKIM записи не добавятся.
    Поэтому указываем хххх@нашдомен.ру
    Как почтовики относятся к емейлам noreply@xxx.ruпока не изучено.

    И тогда устанавливаем SPF

  5. Добавление записи SPF

    1. Удалите существующие TXT-записи. (возможно старые spf?)

    2. Создайте TXT-запись со значением «v=spf1 redirect=_spf.yandex.net».

    3. Если вы хотите отправлять письма не только с серверов Яндекса, укажите дополнительные серверы в таком формате: «v=spf1 ip4:IP-1 ip4:IP-2 ip4:IP-3 include:_spf.yandex.net ~all». Где IP-1, IP-2, IP-3 — IP-адреса дополнительных серверов.

    4. Укажите «@» в поле для заполнения имени или хоста, если такое поле присутствует.

    5. В некоторых панелях управления вместо «@» требуется указать имя вашего домена (например, «yourdomain.com.»). Если вам не удается указать ни «@», ни имя домена, оставьте это поле пустым.

    6. Подождите, пока изменения в DNS вступят в силу. Этот процесс может длиться до 72 часов.

  6. Настройка DKIM

    Без DKIM – на gmail не доходят, поэтому для gmail – dkim обязателен
    Простой вариант настройки: https://www.port25.com/dkim-wizard/

  7. MAIL-tester.com
    Данный сервис показывает наскольк ваше письмо похоже на спам.
    https://www.mail-tester.com

    Набрать 8 из 10 — очень хорошо
    5 из 10 — хорошо
    Менее 5 из 10 — плохо и скорее всего письма попадут в спам или даже в спам не попадут.



  8. Если же не победили есть наиболее надежный вариант:

    1. создаем ящик на mail.ru или gmail или яндекс почте

    2. Устанавливаем php smtp class
      http://soft.unibix.ru/unibix-php/php-smtp-mail-class

    3. Отправляем письма с этого ящика!





Код mailto() v.3.0 на сентябрь 2016г



function mailto($to, $subject, $message, $attach=Array(), $from="Робот", $fromAddr="robot@cityhoster.ru") {



$mb_internal_encoding = mb_internal_encoding();

mb_internal_encoding('UTF-8');



$headers = "Date: ".date("r")."\r\n";

$headers.= "From: =?UTF-8?B?".base64_encode($from)."?= <".$fromAddr.">\r\n";

$headers.= "MIME-Version: 1.0\r\n";



$subject = "=?UTF-8?B?".base64_encode($subject)."?=";

if (strpos($message, '')) {

$msgType = "text/html";
// TODO добавить добавления текстовой версии письма.

} else $msgType = "text/plain";

if (is_string($attach)) $attach = Array($attach);

$files = Array();

foreach ($attach as $path) if (file_exists($path)) $files[] = $path;



if ($files) {

$boundary = md5(time());

$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";



$body = "\r\n--$boundary\r\n";

$body .= "Content-Type: $msgType; charset=UTF-8\r\n";

$body .= "Content-Transfer-Encoding: 8bit\r\n";

$body .= "\r\n";

$body .= $message;



foreach ($files as $path) {

$filename = mb_substr($path, mb_strrpos($path, '/'));

$body .= "\r\n--$boundary\r\n";

$body .= "Content-Type: application/octet-stream\r\n";

$body .= "Content-Transfer-Encoding: base64\r\n";

$body .= "Content-Disposition: attachment; filename*=UTF-8''".str_replace('+', '%20', urlencode($filename))."\r\n";

$body .= "\r\n";

$body .= chunk_split(base64_encode(file_get_contents($path)));

}

$body .= "\r\n--$boundary--\r\n";

} else {

$headers .= "Content-Type: $msgType; charset=UTF-8\r\n";

$headers .= "Content-Transfer-Encoding: 8bit\r\n";

$headers .= "\r\n";

$body = $message;

}

mb_internal_encoding($mb_internal_encoding);

return mail($to, $subject, $body, $headers);

}



echo mailto('info@mail.ru', 'Привет, это тестовое письмо', 'Привет, как дела? Это тестовое письмо');

Пред. урок След. урок