PHPMAILER邮件程序错误:SMTP连接()失败(无法访问Php.ini)

时间:2014-12-08 17:34:20

标签: php .htaccess smtp phpmailer

下午好,

我已经在Phpmailer工作了几天,无法解决这些SMTP Connect失败的错误。我已经禁用了我的防火墙并进行了双重和三重检查,我的用户名和密码都是正确的。我无法访问我的php.ini文件,因为我的服务器是基于云的(Rackspace)。我联系了rackspace,他们告诉我访问我的.htaccess文件。但是,我无法找到有关添加到.htaccess文件的内容的任何信息,以使phpmailer没有SMTP连接失败错误。代码和错误报告如下。任何和所有信息表示赞赏。

P.S。我也看过我的php_errors.log文件,那里没有任何phpmailer错误!

include("../phpmailer/class.phpmailer.php");
include("../phpmailer/PHPMailerAutoload.php");
include("../phpmailer/class.smtp.php");

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->CharSet = 'utf-8';
$mail->ContentType = 'text/html';
$mail->SMTPDebug = 2;

$mail->SMTPAuth   = true;

$mail->SMTPSecure = "ssl";
$mail->Host       = "secure.emailsrvr.com";
$mail->Port       = 465;
$mail->Username   = "xxx@website.com";
$mail->Password   = "password";

$mail->From       = "xxx@website.com";
$mail->FromName   = "xxx";

$mail->AddAddress('xxx@website.com', 'First Name');

$mail->IsHTML(true); // send as HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <strong>in bold!</strong>';
$mail->AltBody = 'This is a plain-text message body';
$mail->WordWrap   = 80; // set word wrap

$mail->msgHTML(file_get_contents('..contents.htm'), dirname(__FILE__));

//Attach an image file
$mail->addAttachment('');

// HTML body
$body  = "Hello";

if(!$mail->Send())
{
  echo "Mailer Error: " . $mail->ErrorInfo;

}else{

    echo "Message sent!";
}

ERROR1:

2014-12-08 17:35:42 Could not access file:
2014-12-08 17:36:03 SMTP ERROR: Failed to connect to server: Connection timed out (110)
2014-12-08 17:36:03 SMTP connect() failed. Mailer Error: SMTP connect() failed.

误差2:

2014-12-08 17:38:09 Could not access file: 
2014-12-08 17:38:10 SERVER -> CLIENT: 220 smtp17.relay.dfw1a.emailsrvr.com ESMTP - VA Code Section 18.2-152.3:1 forbids use of this system for unsolicited bulk electronic mail (Spam) 
2014-12-08 17:38:10 CLIENT -> SERVER: EHLO everyhome.com 
2014-12-08 17:38:10 SERVER -> CLIENT: 250-smtp17.relay.dfw1a.emailsrvr.com 250-SIZE 75000000 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250 ENHANCEDSTATUSCODES 
2014-12-08 17:38:10 CLIENT -> SERVER: AUTH LOGIN 
2014-12-08 17:38:10 SERVER -> CLIENT: 334 VXNlcm5hbWU6 
2014-12-08 17:38:10 CLIENT -> SERVER: cGF1bC5oZWNrQGV2ZXJ5aG9tZS5jb20= 
2014-12-08 17:38:10 SERVER -> CLIENT: 334 UGFzc3dvcmQ6 
2014-12-08 17:38:10 CLIENT -> SERVER: S2ltYmVybHkxMTU= 
2014-12-08 17:38:11 SERVER -> CLIENT: 535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6 
2014-12-08 17:38:11 SMTP ERROR: Password command failed: 535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6 
2014-12-08 17:38:11 CLIENT -> SERVER: QUIT 
2014-12-08 17:38:11 SERVER -> CLIENT: 221 2.0.0 Bye 
2014-12-08 17:38:11 SMTP connect() failed. Mailer Error: SMTP connect() failed.

3 个答案:

答案 0 :(得分:0)

错别字:

$mail->msgHTML(file_get_contents('..contents.htm'), dirname(__FILE__));
                                    ^--- missing /?

除非你真的有一个&#34;双重隐藏&#34;文件名为&#34; .. contents.htm&#34;。

至于smtp错误 - 它超时了。某些secure.emailsrvr.com:465是从您的php服务器防火墙/无法访问的。由于这不是编程问题,我们无法真正帮助您 - 您必须弄清楚数据包在哪里/如何被丢入bitbucket。

答案 1 :(得分:0)

我的php.ini文件,因为我的服务器是基于云的(Rackspace)。我联系了rackspace,他们告诉我访问我的.htaccess文件。

你的php.ini文件中的所有内容都是sendmail配置,你不必对.htaccess做任何事情,只有当你要在那里添加东西时才能这样做就像你在php.ini文件上一样。

你需要看看maillog。问题

  

tailf / var / log / maillog

如果你在命令行上获得更好的调试信息。


如果您启用了其他错误日志

,这会更好
require_once '../class.phpmailer.php';

$mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch

try {
    $mail->AddReplyTo('name@yourdomain.com', 'First Last');
    //additional mail related code 

} catch (phpmailerException $e) {
    echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
    echo $e->getMessage(); //Boring error messages from anything else!
}

答案 2 :(得分:0)

这看起来像一个简单的身份验证失败,所以请仔细检查您的用户名和密码。我建议从PHPMailer提供的一个示例开始 - 看起来它基于一些非常古老的东西,所以还要确保你有来自github的最新PHPMailer。

将代码缩减到绝对最小值以删除错误来源 - 例如直接设置Body,不要调用msgHTML,不要加载外部内容,不要添加附件 - 只删除一些不是绝对必要的东西。

尝试使用端口587上的“tls”进行连接,您也可以使用AuthType = 'PLAIN'。同时确认EHLO响应与您要求连接的服务器匹配,以防您被ISP透明地重定向。

PHPMailer docs中还介绍了检查DNS和网络问题。