2016-06-21 228 views
2

我尝试使用outlook.com的SMTP服务器PHPMailer,但我不断收到SMTP错误 我跟着来自PHPMailer的github页面的示例代码,我也看了其他关于SO ,但答案有没有解决我的问题PHPMailer SMTP错误:数据不被接受

这是代码

<?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 auth怪胎。 [此链接](https://www.example-code.com/csharp/smtp_hotmail_live.asp)表明,如果您先以其他方式登录,它将会清除。顺便说一句,你的密码很容易解码,所以我会编辑它,但你应该改变它。 – Synchro

+1

不要禁用证书验证,除非您确实必须为特定的已知原因 - 例如,如果您的ISP的防火墙透明地重定向您,验证可能会失败,在这种情况下,您会将密码提供给第三方。 – Synchro

+0

谢谢,我没有意识到我的密码在那里。我不断收到SSL证书错误,所以我禁用了验证,它仍然处于开发模式,所以现在没关系,我只想让事情第一个工作 –

回答

-1

也许我错了,但据我看到你正在使用属性“Body”来尝试发送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(看案例:小米)。也看看你的邮件的SMTP协议限制(正确关闭,发送特定指令,...) – Goufalite

0

在阅读Synchro的评论之后,我尝试先从Web登录到Outlook,然后它给了我一个验证码来解决。

之后,我试着再次运行脚本,它的工作原理,所以我想这是Outlook的僵尸预防系统阻止脚本。

相关问题