Разбираемся с отправкой почты с нашего сервера kkmspb.ru через phpMailer. Наш сайт находится на хостинге infobox.
Почта нашего домена kkmspb.ru делегирована на Яндекс.
Как сделать так ,чтобы почта отправляемая через smtp сервер яндекса приходила к получателю как шифрованная и подписанная и НЕ попадала в спам.
SOA Start of Authority
в SOA указываются NS-сервера являющиеся авторитетными для данной зоны
DKIM DomainKeys Identified Mail
SPF Sender Policy Framework
По инструкции яндекса надо на DNS прописать следующие опции:
Тип записи | Имя поддомена | Приоритет | Значение |
---|---|---|---|
MX | @ | 10 | mx.yandex.net. |
TXT (SPF) | @ | не указывается | v=spf1 redirect=_spf.yandex.net |
TXT (DKIM) | mail._domainkey | не указывается | Скопируйте значение из настроек Почты |
CNAME | не указывается | domain.mail.yandex.net. |
Сделали эти записи , ждем пару дней, пока все dns сервера обменяются информацией. То есть наши dns нашего провайдера типа ns1.infobox.org должны обменяться с основными серверами google 8.8.8.8 и т.д.
И вот тут начинается полное не понимание что , кому , куда прописывать. Чего потом ждать ... И самое главное как проверить пересылку почты...
Первый рабочий вариант случился , когда мы ушли от яндекс и ушли от infobox, что имеется ввиду:
Дело в том , что DKIM это по сути просто пара ключей открытый и закрытый , сделанный по RSA любым подручным средством.
Так вот то , что яндекс предлагает вам добавить в DNS TXT это открытый ключ, но как получить у яндекса его пару - закрытый ключ, с которым вам надо работать в коде phpMailer вашего сайта. Яндекс его не предоставляет естественно.
А надо ли вам это, если вы можете сгенерировать сами эту пару ключей например на сайте https://dkimcore.org. Там все расписано , за пару часов разберетесь.
Главное обратите внимание на слово селектор, dkimcore.org автоматом вам его генерирует , а пароль генерируется банально пустой.
privatekey.txt - закрытый ключ сгенерированный dkimcore.org. Наш работающий вариант php :
<?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require_once($_SERVER["DOCUMENT_ROOT"].'/lk/PHPMailer_6.2/src/Exception.php');
require_once($_SERVER["DOCUMENT_ROOT"].'/lk/PHPMailer_6.2/src/PHPMailer.php');
require_once($_SERVER["DOCUMENT_ROOT"].'/lk/PHPMailer_6.2/src/SMTP.php');
// PHP Version 7.1.33
$mail_ = new PHPMailer(true);
try
{
$mail_->SMTPAuth = true;
$mail_->Host = 'ssl://smtp.kassovye-apparaty.ru';
$mail_->Username = 'p@kassovye-apparaty.ru';
$mail_->Password = "......";
$mail_->CharSet = "utf-8";
//$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
$mail->SMTPSecure = 'ssl';
//$mail_->Port = 587;
$mail_->Port = 465;
$email="you-email@gmail.com";
$mail_->setFrom("p@kassovye-apparaty.ru","kassovye-apparaty.ru");
$mail_->addAddress($email, 'dear friend'); // Add a recipient
$mail_->isHTML(true); // Set email format to HTML
$mail_->Subject = "this is title for test";
$mail_->Body = "this is body";
$mail_->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail_->IsMail();
$mail_->Encoding = 'base64';
if( ! file_exists(dirname(__FILE__).'/privatekey.txt'))
{
echo '!file_exists '.dirname(__FILE__).'/privatekey.txt';
}
$mail_->DKIM_domain = 'kassovye-apparaty.ru';
$mail_->DKIM_private = dirname(__FILE__).'/privatekey.txt'; // Make sure to protect the key from being publicly accessible!
$mail_->DKIM_selector = '1623401940.apparaty';
$mail_->DKIM_passphrase = '';
$mail_->DKIM_identity = $mail_->From;
$mail_->send();
echo "<h1>Письмо успешно отправлено на $email</h1>";
}
catch (Exception $e)
{
echo "<h1>Message could not be sent to $email</h1>";
}
?>
В получаемом письме на gmail.com удобно смотреть оригинал письма , там должно появиться запись примерно такого содержания:
DKIM: PASS, домен kassovye-apparaty.ru
Это означает , что письмо наше было корректно зашифровано и пописано. И яндекс тут не нужен оказывается для шифрования вашего письма.
Но надо добавить в DNS TXT запись вашей открытой части ключа:
1623401940.apparaty._domainkey.kassovye-apparaty.ru.
v=DKIM1;t=s;n=core;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwIvHN0MmOGRzQe8wVBGNk9G6GMShl0V4eoRZDYuuY3wYin5oD9qF+B2jQgFTgdzoMB081Gh7FAWmah9RjxX1GTUjuLfU20pdEbP1r8PPxfUOUsBIbm8fXVIBjDgX4xcJb9P93Pu52ZZtUbUtQm3/DLRBXznNVfYK84so2Yvp8uwIDAQAB
1623401940.apparaty - это тот самый селектор.
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwIvHN0MmOGRzQe8wVBGNk9G6GMShl0V4eoRZDYuuY3wYin5oD9qF+B2jQgFTgdzoMB081Gh7FAWmah9RjxX1GTUjuLfU20pdEbP1r8PPxfUOUsBIbm8fXVIBjDgX4xcJb9P93Pu52ZZtUbUtQm3/DLRBXznNVfYK84so2Yvp8uwIDAQAB - это открытый ключ.
Но есть еще нюанс - DNS сервер сайта kassovye-apparaty.ru расположен на reghouse.ru и там изменения вступают в силу минут через 40 , а не как обещано через 2-3 дня... На infobox я так и не смог настроить DNS.