问题在PHP SMTP认证使用的PHPMailer,梨邮件的作品(Problem with SMTP

2019-07-31 10:29发布

有I'm麻烦发送电子邮件与PHPMailer的类,但它与PEAR的Mail ::工厂工作。

我想这个问题是与SMTP认证,但我couldn't发现问题。

有问题的代码是:

<?php
require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();       // set mailer to use SMTP
$mail->Host = 'mail.xxx.com.br';  // my host here
$mail->SMTPAuth = true;     // turn on SMTP authentication
$mail->Username = 'xxx@xxx.com.br';  // a valid email here
$mail->Password = '***';  // the password from email
$mail->From = 'from@xxx.com.br';
$mail->SMTPDebug = true;
$mail->AddReplyTo('from@xxx.com.br', 'Test');

$mail->FromName = 'Test SMTP';
$mail->AddAddress('teste@xxx.com.br', 'teste@xxx.com.br');

$mail->Subject = 'Test SMTP';
$mail->IsHTML(true);
$mail->Body = '<b>Teste</b><br><h1>teste 2</h1>';   
//$mail->Send();

if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

?>

梨,工程的代码是:

<?php
include('Mail.php');
include('Mail/mime.php');

$text = 'Versao em texto';
$html = '<html><body>Versao de email em <b>HTML</b></body></html>';
$crlf = "\n";
$hdrs = array(
              'From'    => 'from@xxx.com.br',
              'Subject' => 'Test  - mail.php'
              );

$mime = new Mail_mime($crlf);

$mime->setTXTBody($text);
$mime->setHTMLBody($html);

$body = $mime->get();
$hdrs = $mime->headers($hdrs);

$mail = Mail::factory('smtp',
  array ('host' => 'mail.xxx.com.br',
    'debug'=> true,
    'auth' => true,
    'username' => 'xxx@xxx.com.br',
    'password' => '***'));

$mail->send('teste@xxx.com.br', $hdrs, $body);
?>

当我与调试激活(SMTPDebug =真)我有问题,运行的代码:

SMTP -> FROM SERVER:

SMTP -> get_lines(): $data was ""

SMTP -> get_lines(): $str is "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

"

SMTP -> get_lines(): $data is "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

"

SMTP -> get_lines(): $data was "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

"
SMTP -> get_lines(): $str is "220-We do not authorize the use of this system to transport unsolicited, 
"

SMTP -> get_lines(): $data is "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

"

SMTP -> get_lines(): $data was "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

"

SMTP -> get_lines(): $str is "220 and/or bulk e-mail.

"

SMTP -> get_lines(): $data is "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

220 and/or bulk e-mail.

"

SMTP -> FROM SERVER: 

220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

220 and/or bulk e-mail.

SMTP -> ERROR: EHLO not accepted from server: 220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

220 and/or bulk e-mail.


SMTP -> get_lines(): $data was ""

SMTP -> get_lines(): $str is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

"

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

"

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

"

SMTP -> get_lines(): $str is "250-SIZE 20971520

"

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]
250-SIZE 20971520

"

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]
250-SIZE 20971520

"

SMTP -> get_lines(): $str is "250-PIPELINING

"

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

250-SIZE 20971520

250-PIPELINING

"

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

250-SIZE 20971520

250-PIPELINING

"

SMTP -> get_lines(): $str is "250-AUTH PLAIN LOGIN

"

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

250-SIZE 20971520

250-PIPELINING

250-AUTH PLAIN LOGIN

"

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

250-SIZE 20971520

250-PIPELINING

250-AUTH PLAIN LOGIN

"

SMTP -> get_lines(): $str is "250-STARTTLS

"

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

250-SIZE 20971520

250-PIPELINING

250-AUTH PLAIN LOGIN

250-STARTTLS

"

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

250-SIZE 20971520

250-PIPELINING

250-AUTH PLAIN LOGIN

250-STARTTLS

"

SMTP -> get_lines(): $str is "250 HELP

"

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

250-SIZE 20971520

250-PIPELINING

250-AUTH PLAIN LOGIN

250-STARTTLS

250 HELP

"

SMTP -> FROM SERVER: 

250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

250-SIZE 20971520

250-PIPELINING

250-AUTH PLAIN LOGIN

250-STARTTLS

250 HELP

SMTP -> get_lines(): $data was ""

SMTP -> get_lines(): $str is "250 orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

"

SMTP -> get_lines(): $data is "250 orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]

"

SMTP -> ERROR: AUTH not accepted from server: 250 orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]


SMTP -> get_lines(): $data was ""

SMTP -> get_lines(): $str is "503 AUTH command used when not advertised

"

SMTP -> get_lines(): $data is "503 AUTH command used when not advertised

"

SMTP -> FROM SERVER:

503 AUTH command used when not advertised

SMTP -> ERROR: RSET failed: 503 AUTH command used when not advertised


Message could not be sent. <p>Mailer Error: SMTP Error: Could not connect to SMTP host.

和PEAR邮件代码的调试结果是:

DEBUG: Recv: 220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Tue, 04 Aug 2009 19:37:10 -0300 

DEBUG: Recv: 220-We do not authorize the use of this system to transport unsolicited, 

DEBUG: Recv: 220 and/or bulk e-mail.

DEBUG: Send: EHLO localhost


DEBUG: Recv: 250-orion.bommtempo.net.br Hello localhost [200.155.129.6]

DEBUG: Recv: 250-SIZE 20971520

DEBUG: Recv: 250-PIPELINING

DEBUG: Recv: 250-AUTH PLAIN LOGIN

DEBUG: Recv: 250-STARTTLS

DEBUG: Recv: 250 HELP

DEBUG: Send: STARTTLS


DEBUG: Recv: 220 TLS go ahead

DEBUG: Send: EHLO localhost


DEBUG: Recv: 250-orion.bommtempo.net.br Hello localhost [200.155.129.6]

DEBUG: Recv: 250-SIZE 20971520

DEBUG: Recv: 250-PIPELINING

DEBUG: Recv: 250-AUTH PLAIN LOGIN

DEBUG: Recv: 250 HELP

DEBUG: Send: AUTH LOGIN


DEBUG: Recv: 334 VXNlcm5hbWU6

DEBUG: Send: c2lzdGVtYWFkbWluQGJvbW10ZW1wby5jb20uYnI=


DEBUG: Recv: 334 UGFzc3dvcmQ6

DEBUG: Send: RVkyYVM4YnpMNU5k


DEBUG: Recv: 235 Authentication succeeded

DEBUG: Send: MAIL FROM:


DEBUG: Recv: 250 OK

DEBUG: Send: RCPT TO:


DEBUG: Recv: 250 Accepted

DEBUG: Send: DATA


DEBUG: Recv: 354 Enter message, ending with "." on a line by itself

DEBUG: Send: MIME-Version: 1.0

From: sistemaadmin@bommtempo.com.br

Subject: Teste de mail - mail.php

Content-Type: multipart/alternative;
    boundary="=_b3c5407ccf494306d78fbb35800efe65"


--=_b3c5407ccf494306d78fbb35800efe65

Content-Transfer-Encoding: 7bit

Content-Type: text/plain; charset="ISO-8859-1"


Versao em texto

--=_b3c5407ccf494306d78fbb35800efe65

Content-Transfer-Encoding: quoted-printable

Content-Type: text/html; charset="ISO-8859-1"


Versao de email em HTML--=_b3c5407ccf494306d78fbb35800efe65--

.

DEBUG: Recv: 250 OK id=1MYSd4-0005Ky-Jw

DEBUG: Send: QUIT

Answer 1:

我的评论这条线解决了奇怪的问题

//$mail->IsSmtp();

白衣最后PHPMailer的版本(5.2)



Answer 2:

尝试添加此:

$mail->SMTPAuth   = true;
$mail->SMTPSecure = "tls";

通过查看您的调试日志,你可以看到发生故障的PHPMailer的日志显示此:

(..snip..)
SMTP -> ERROR: AUTH not accepted from server: 250 orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6]
(..snip..)
503 AUTH command used when not advertised
(..snip..)

当你的成功PEAR日志显示此:

DEBUG: Send: STARTTLS
DEBUG: Recv: 220 TLS go ahead

我的猜测是,明确要求PHPMailer的使用TLS将把它在正确的轨道上。
此外,请确保您使用的PHPMailer的最新正矢量。



Answer 3:

这件事给我的。 对我来说,后缀是位于同一服务器作为PHP脚本,当我将使用SMTP认证和smtp.domain.com,而不是本地主机的错误发生了什么。

所以,当我注释掉这几行:

$ MAIL-> SMTPAUTH = TRUE;
$ MAIL-> SMTPSecure = “TLS”;

并设置主机

$mail->Host = "localhost";

代替

$ MAIL->主机= 'smtp.mydomainiuse.com'

和它的工作:)



Answer 4:

这使OpenSSL的扩展,并与“BR”目录的语言吗? 首先检查数据。



Answer 5:

进出口4要求后,客户端发出EHLO AUTH命令只发送 - 尝试进行身份验证,而不EHLO将被拒绝。 有些邮件服务器需要EHLO发出两次。 PHPMailer的显然没有这样做。 如果PHPMailer的不允许强制EHLO开始,你真的应该切换到SwiftMailer 4 。



Answer 6:

检查是否已设置限制传出SMTP于某些系统用户(根,MTA,邮递员......)。 这种限制可能会阻止垃圾邮件发送者,但会重定向传出SMTP连接到本地邮件服务器。



文章来源: Problem with SMTP authentication in PHP using PHPMailer, with Pear Mail works