PHP Mailer для Outlook: данные не приняты Адрес получателя зарезервирован RFC 2606

Когда я пытаюсь отправить электронное письмо на свою учетную запись Outlook, я получаю сообщение об ошибке: Ошибка SMTP: данные не приняты. Сообщение не может быть отправлено. Ошибка почтовой программы: ошибка SMTP: данные не приняты. Ошибка сервера SMTP: команда DATA END не выполнена Деталь: 501 5.1.5 Адрес получателя зарезервирован RFC 2606 Код SMTP: 550 Дополнительная информация SMTP: 5.3.4. Я пробовал со своей учетной записью Gmail, и это работает, но не с Outlook Live. Кто-нибудь может мне помочь?

Вот код:

 <?php
require 'phpmailer/PHPMailerAutoload.php';

$mail = new PHPMailer;

$mail->SMTPDebug = 2;                               // Enable verbose debug output

$mail->isSMTP();                     
$mail->Host = 'smtp-mail.outlook.com';              // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                             // Enable SMTP authentication
$mail->Username = '[email protected]';       // SMTP username
$mail->Password = '***********';                    // SMTP password
$mail->SMTPSecure = 'TLS';                          // Enable TLS encryption, `ssl` also accepted
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);                            
$mail->Port = 587;                                             // TCP port to connect to

$mail->setFrom('[email protected]');
$mail->addAddress('[email protected]', 'Joe User');     // Add a recipient
$mail->addAddress('[email protected]');                        // Name is optional
$mail->addReplyTo('[email protected]', 'Information');
$mail->addCC('[email protected]');
$mail->addBCC('[email protected]');


$mail->isHTML(true);                                           // Set email format to HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}
?>

person Andrea Di Mauro    schedule 24.08.2016    source источник


Ответы (1)


RFC2606 определяет некоторые домены, предназначенные только для примера и гарантированно никогда не существующие. в частности, к ним относятся example.com, example.org и example.net. Это означает, что вы можете использовать разумно выглядящие адресаты в примере кода, не опасаясь непреднамеренной отправки электронной почты или другого трафика случайным людям, что может произойти, если вы используете выдуманное имя, такое как mydomain.com, потому что оно может существовать на самом деле.

Ошибка, которую вы видите, распознала, что вы используете зарезервированный домен, подобный этому, и поэтому отказывается принять вашу заявку. Используйте настоящие адреса или удалите строки, использующие зарезервированные адреса, и все заработает.

Вы неправильно установили параметр SMTPSecure - он чувствителен к регистру, поэтому он должен быть:

$mail->SMTPSecure = 'tls';

Вы отключаете проверку сертификата через SMTPOptions — Outlook/Hotmail и т. д. обычно обслуживают проверяемые сертификаты, поэтому вам следует отключать проверку только для решения конкретной проблемы, поскольку это небезопасный способ избежать проблем с проверкой, т. е. не делайте этого, если вы < em>действительно нужно по известной конкретной причине.

person Synchro    schedule 24.08.2016
comment
Спасибо за ваш ответ, я только что изменил весь этот example.com, и это сработало. Однако я не изменил SMTP Secure, потому что он выдал мне эту ошибку: Предупреждение: stream_socket_enable_crypto(): операция SSL не удалась с кодом 1. Сообщения об ошибках OpenSSL: ошибка: 14090086: процедуры SSL: ssl3_get_server_certificate: сбой проверки сертификата - person Andrea Di Mauro; 24.08.2016
comment
Узнайте, почему он терпит неудачу. Не отключайте проверку, пока не узнаете причину, иначе вы тратите впустую безопасность, которую дает вам TLS. Скорее всего, это либо несоответствующее имя сертификата, либо ваш интернет-провайдер перехватывает ваш трафик. - person Synchro; 24.08.2016
comment
Большое спасибо, вы попали прямо в точку. Во время разработки я вошел в систему как [email protected]. Я вышел из системы, а затем вошел в систему как правильный пользователь, это сработало. - person VivekDev; 03.01.2017