Мой простой PHP-скрипт для отправки почты -
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "fromaddress@gmail.com";
$to = "toaddress@gmail.com";
$subject = "PHP Mail Test script";
$message = "This is a test to check the PHP Mail functionality";
$headers = "From:" . $from;
mail($to,$subject,$message, $headers);
echo "Test email sent";
?>
Когда я запускаю этот скрипт на любом другом сервере, он работает нормально, но когда я делаю это на моей новой машине CentOS 7, я всегда получаю ошибка в / var / log / maillog
Mar 15 19:08:38 host sendmail[1521]: u2FN8cfK001521: from=root, size=23, class=0, nrcpts=1, msgid=<201603152308.u2FN8cfK001521@host.example.com>, relay=root@localhost
Mar 15 19:08:38 host sendmail[1522]: u2FN8cTc001522: from=<root@host.example.com>, size=328, class=0, nrcpts=1, msgid=<201603152308.u2FN8cfK001521@host.example.com>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
Mar 15 19:08:38 host sendmail[1521]: u2FN8cfK001521: to=myemail@gmail.com, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30023, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (u2FN8cTc001522 Message accepted for delivery)
Mar 15 19:08:38 host sendmail[1524]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=ECDHE-RSA-AES128-GCM-SHA256, bits=128/128
Mar 15 19:08:39 host sendmail[1524]: u2FN8cTc001522: to=<myemail@gmail.com>, ctladdr=<root@host.example.com> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=120328, relay=gmail-smtp-in.l.google.com. [IPv6:2607:f8b0:400d:c06::1a], dsn=5.0.0, stat=Service unavailable
Mar 15 19:08:39 host sendmail[1524]: u2FN8cTc001522: u2FN8dTc001524: DSN: Service unavailable
Mar 15 19:08:39 host sendmail[1524]: u2FN8dTc001524: to=<root@host.example.com>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=31588, dsn=2.0.0, stat=Sent
. Похоже, что в отличие от других общедоступных почтовых серверов (Yahoo !, Hotmail) Gmail должен проверять соответствующий IP-адрес в записи SPF. А поскольку sendmail продолжал отправлять электронные письма через IPv6, его не было в записи SPF. Итак, все, что я сделал, это просто добавил IPv6 в запись SPF, и все прошло нормально.
Итак, теперь моя запись SPF выглядит примерно так
v = spf1 mx a ip6: 2547: 2200: 60: 9a2a :: / 64 IP4: 44.33.33.104/32 a: mail.example.org include: example.org ~ all