2016-06-21 4 views
2

Я пытаюсь использовать PHPMailer, используя SMTP-сервер outlook.com, но я продолжаю получать SMTP-ошибку Я следовал примеру кода из страницы github PHPMailer, и я также рассмотрел другие вопросы по SO , но ответы там не решить мою проблемуОшибка SMTP PHPMailer: данные не принимаются

Это код

<?php 

date_default_timezone_set('Etc/UTC'); 

require_once 'vendor/autoload.php'; 
$mail = new PHPMailer; 

$mail->SMTPOptions = array(
    'ssl' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true 
    ) 
); 

//Tell PHPMailer to use SMTP 
$mail->isSMTP(); 
$mail->SMTPDebug = 2; 

//Ask for HTML-friendly debug output 
$mail->Debugoutput = 'html'; 

//Set the hostname of the mail server 
$mail->Host = 'smtp-mail.outlook.com'; 
$mail->Port = 587; 
$mail->SMTPSecure = 'tls'; 

//Whether to use SMTP authentication 
$mail->SMTPAuth = true; 

//Username to use for SMTP authentication 
$mail->Username = "[email protected]"; 

//Password to use for SMTP authentication 
$mail->Password = "pass"; 

//Set who the message is to be sent from 
$mail->setFrom('[email protected]', 'User'); 

//Set who the message is to be sent to 
$mail->addAddress('[email protected]', 'Recipient'); 

//Set the subject line 
$mail->Subject = 'PHPMailer SMTP test'; 


$mail->Body = 'This is the HTML message body <b>in bold!</b>'; 
//Replace the plain text body with one created manually 
$mail->AltBody = 'This is a plain-text message body'; 

//send the message, check for errors 
if (!$mail->send()) { 
    echo "<br><br>Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
} 

а вот отладочную

SERVER -> CLIENT: 220 BLU436-SMTP81.smtp.hotmail.com Microsoft ESMTP MAIL Service, Version: 8.0.9200.16384 ready at Mon, 20 Jun 2016 23:35:39 -0700 
CLIENT -> SERVER: EHLO localhost 
SERVER -> CLIENT: 250-BLU436-SMTP81.smtp.hotmail.com Hello [139.193.110.46]250-TURN250-SIZE 41943040250-ETRN250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-8bitmime250-VRFY250-TLS250-STARTTLS250 OK 
CLIENT -> SERVER: STARTTLS 
SERVER -> CLIENT: 220 2.0.0 SMTP server ready 
CLIENT -> SERVER: EHLO localhost 
SERVER -> CLIENT: 250-BLU436-SMTP81.smtp.hotmail.com Hello [139.193.110.46]250-TURN250-SIZE 41943040250-ETRN250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-8bitmime250-VRFY250-AUTH LOGIN PLAIN XOAUTH2250 OK 
CLIENT -> SERVER: AUTH LOGIN 
SERVER -> CLIENT: 334 VXNlcm5hbWU6 
CLIENT -> SERVER: xxx== 
SERVER -> CLIENT: 334 UGFzc3dvcmQ6 
CLIENT -> SERVER: xxx= 
SERVER -> CLIENT: 235 2.7.0 Authentication succeeded 
CLIENT -> SERVER: MAIL FROM:<[email protected]> 
SERVER -> CLIENT: 250 2.1.0 [email protected] OK 
CLIENT -> SERVER: RCPT TO:<[email protected]> 
SERVER -> CLIENT: 250 2.1.5 [email protected] 
CLIENT -> SERVER: DATA 
SERVER -> CLIENT: 354 Start mail input; end with <CRLF>.<CRLF> 
CLIENT -> SERVER: Date: Tue, 21 Jun 2016 06:35:39 +0000 
CLIENT -> SERVER: To: Recipient <[email protected]> 
CLIENT -> SERVER: From: User <[email protected]> 
CLIENT -> SERVER: Subject: PHPMailer SMTP test 
CLIENT -> SERVER: Message-ID: <[email protected]> 
CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.16 (https://github.com/PHPMailer/PHPMailer) 
CLIENT -> SERVER: MIME-Version: 1.0 
CLIENT -> SERVER: Content-Type: multipart/alternative; 
CLIENT -> SERVER: boundary="b1_405c2ef139a1fa30da7bd01a6f945eb0" 
CLIENT -> SERVER: Content-Transfer-Encoding: 8bit 
CLIENT -> SERVER: 
CLIENT -> SERVER: This is a multi-part message in MIME format. 
CLIENT -> SERVER: 
CLIENT -> SERVER: --b1_405c2ef139a1fa30da7bd01a6f945eb0 
CLIENT -> SERVER: Content-Type: text/plain; charset=us-ascii 
CLIENT -> SERVER: 
CLIENT -> SERVER: This is a plain-text message body 
CLIENT -> SERVER: 
CLIENT -> SERVER: 
CLIENT -> SERVER: --b1_405c2ef139a1fa30da7bd01a6f945eb0 
CLIENT -> SERVER: Content-Type: text/html; charset=us-ascii 
CLIENT -> SERVER: 
CLIENT -> SERVER: This is the HTML message body <b>in bold!</b> 
CLIENT -> SERVER: 
CLIENT -> SERVER: 
CLIENT -> SERVER: 
CLIENT -> SERVER: --b1_405c2ef139a1fa30da7bd01a6f945eb0-- 
CLIENT -> SERVER: 
CLIENT -> SERVER: . 
SERVER -> CLIENT: 550 5.3.4 554-554 5.2.0 STOREDRV.Deliver; delivery result banner 
SMTP ERROR: DATA END command failed: 550 5.3.4 554-554 5.2.0 STOREDRV.Deliver; delivery result banner 
SMTP Error: data not accepted. 
+1

Вы делаете все правильно - это выглядит как странность Outlook. [Эта ссылка] (https://www.example-code.com/csharp/smtp_hotmail_live.asp) предполагает, что она очистится, если вы сначала войдете в систему другими способами. Кстати, ваш пароль в этом случае легко декодируется, поэтому я отредактирую его, но вы, вероятно, должны его изменить. – Synchro

+1

Не отключайте проверку сертификатов, если вам действительно не нужно, по определенным, известным причинам - например, проверка может завершиться неудачно, если брандмауэр вашего интернет-провайдера перенаправляет вас прозрачно, и в этом случае вы будете передавать свой пароль третьей стороне. – Synchro

+0

Спасибо, я не понимал, что мой пароль там. Я продолжал получать SSL-сертификаты, поэтому я отключил верификацию, он все еще находится в режиме dev, так что теперь все в порядке, я просто хочу, чтобы все работало сначала –

ответ

-1

Может быть, я ошибаюсь , но, насколько я вижу, вы используете свойство «Тело» для попытки отправки данных HTML, но в PHPmailer для этого есть свойство MsgHTML. Может быть, это проблема (как уже упоминалось, может быть, нет, но стоит проверить).

Заменить строку:

$mail->Body = 'This is the HTML message body <b>in bold!</b>';

по:

$mail->MsgHTML('This is the HTML message body <b>in bold!</b>'); 

и испытания;)

Хороший взгляд,

Хорошо, кажется, что выше ничего не добавляет , Я проверил ваш код в новой учетной записи электронной почты yahoo.com, и он работает очень хорошо. Я только изменил данные своего личного счета и строку запроса:

<?php 

date_default_timezone_set('Etc/UTC'); 

require_once 'include/PHPMaile/PHPMailerAutoload.php'; 
$mail = new PHPMailer; 

$mail->SMTPOptions = array(
    'ssl' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true 
    ) 
); 

//Tell PHPMailer to use SMTP 
$mail->isSMTP(); 
$mail->SMTPDebug = 2; 

//Ask for HTML-friendly debug output 
$mail->Debugoutput = 'html'; 

//Set the hostname of the mail server 
$mail->Host = 'smtp.mail.yahoo.com'; 
$mail->Port = 587; 
$mail->SMTPSecure = 'tls'; 

//Whether to use SMTP authentication 
$mail->SMTPAuth = true; 

//Username to use for SMTP authentication 
$mail->Username = "[email protected]"; 

//Password to use for SMTP authentication 
$mail->Password = "xxx"; 

//Set who the message is to be sent from 
$mail->setFrom('[email protected]', 'User'); 

//Set who the message is to be sent to 
$mail->addAddress('[email protected]', 'Recipient'); 

//Set the subject line 
$mail->Subject = 'PHPMailer SMTP test'; 


$mail->Body = 'This is the HTML message body <b>in bold!</b>'; 
//Replace the plain text body with one created manually 
$mail->AltBody = 'This is a plain-text message body'; 

//send the message, check for errors 
if (!$mail->send()) { 
    echo "<br><br>Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
} 

Надеюсь, это поможет.

+0

Я просто пробовал это, ту же ошибку –

+0

Вы пробовали другой SMTP-сервер? –

+0

У меня есть рабочий скрипт, где я использую msgHTML (посмотрите на случай: крошечный m). Также посмотрите на ограничения протокола SMTP на почту (закройте правильно, отправьте конкретные инструкции, ...) – Goufalite

0

После прочтения комментария Синхро, я попытался войти в первую очередь в Outlook из Интернета, и он дал мне капчу, чтобы решить.

Впоследствии я попытался запустить сценарий еще раз, он работает, поэтому я думаю, что это была система бот-профилактики, которая блокировала скрипт.

Смежные вопросы