phpmailer / IsSMTP导致500错误,但1分钟后发送邮件

时间:2015-01-13 16:03:10

标签: smtp phpmailer

每当$ mail-> isSMTP();在phpmailer中设置它“挂起”约1分钟,然后重定向到: 带有XID的500 Service Unavailable页面:2060448470。

但是一分钟后我收到了发送的邮件。在邮件中我可以阅读: 收到-SPF:通过(google.com:域名为admin@skivbasar.se指定2a00:16d8:0:4 :: 200作为允许的发件人)

当我删除“$ mail-> isSMTP();”电子邮件立即发送,但他们没有得到SPI =通过: spf = none(google.com:117658@atapa01.citynetwork.se未指定允许的发件人主机)。

我真的需要SMTP工作,因为我过去收到了很多丢失的邮件。我花了几天时间在stackoverflow上寻找一个包含20多篇文章的解决方案。

我已经从worxware和github多次重试了示例代码。它始终是“$ mail-> isSMTP();”拒绝正常工作。

这是我的邮件代码:

require("PHPMailerAutoload.php");
require("class.phpmailer.php");
require("class.smtp.php");

$mail = new PHPMailer();
$mail->Host = "mail.skivbasar.se";
$mail->Port = 587;
$mail->SMTPAuth = true;    
$mail->SMTPSecure = "ssl";
$mail->IsSMTP();   
$mail->Username = "-----.se";  // SMTP username
$mail->Password = "-------"; // SMTP password
$mail->AddReplyTo($replyto);
$mail->From     = "admin@skivbasar.se";
$mail->FromName = "skivbasar.se";
$mail->AddAddress($row['email']);
$mail->Subject  = $row['subject'];
$mail->Body     = $row['message'];
$mail->WordWrap = 150;

if(!$mail->Send()) {
    $error = true;
} else {

    $error = false;
}

您可以访问测试页以查看操作中的错误:http://skivbasar.se/action/mail/t3.php

UPPDATE:

非常感谢您回复Synchro!你似乎是一个真正的phpmailer专家!

我已经尝试了无数次tls和ssl甚至评论该行并使用端口587和465.只要“isSMTP”属于,两者实际上都可以发送邮件。

我试图解决的真正问题是,为什么只要设置了“isSMTP”,脚本就会挂起1分钟,但在重定向到500页后仍会发送邮件。

没有isSMTP的softfail正在通过以下方式发送: 来自smtp02.mailout.citynetwork.se(mailout.citynetwork.se。[91.123.193.90])

并且通过的(但被绞死的)正在通过以下方式发送: 来自smtp03.citynetwork.se(mail.citynetwork.se。[91.123.193.200])。

感觉脚本正在等待来自邮件服务器的回复60秒(如HELO)以及服务器没有响应时。它会在60分钟后发送邮件。我在某个地方读过这个。我还在代码中找到了一些条目,它在第1340行的class.phpmailer.php中引用了“HELO”,“我们必须在谈判后重新发送HELO”。

由于它重定向到500页我无法打印任何错误消息。我也没有访问我的日志。但它适用于localhost上的“isSMTP”,只有当脚本在线运行时才会挂起。

2 个答案:

答案 0 :(得分:0)

这里可能会出现问题。

你实际上有重复的要求 - 你只需要加载PHPMailerAutoload.php - 摆脱其他两个。

你正在使用'ssl'但是在端口587上。这可能不起作用 - 对于端口587,设置$mail->SMTPSecure = 'tls';

您的邮件服务正在使用TLS - 请参阅尝试连接时发生的情况:

telnet mail.skivbasar.se 587
Trying 91.123.193.200...
Connected to mail.skivbasar.se.
Escape character is '^]'.
220 smtp05.citynetwork.se ESMTP Postfix
EHLO localhost
250-smtp05.citynetwork.se
250-PIPELINING
250-SIZE 31457280
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.

请注意该扩展列表中的STARTTLS

如果您打算使用PHPMailer,最好从其中一个捆绑示例开始,尤其是gmail版本,因为它可以帮助您避免像这样的愚蠢错误。

答案 1 :(得分:0)

我遇到了同样的问题,在我的$ mail-> send()上获得了500个响应,但在按照Synchros的建议查找phpMailers的gmail示例后,我使用了

$mail->Host = gethostbyname('mail.citynetwork.se');

而不是

$mail->Host = 'mail.citynetwork.se';

这解决了我的问题。