【发布时间】:2015-04-08 11:57:37
【问题描述】:
我正在设计一个阿里云网站。该网站包含使用 PHPMailer 发送电子邮件的功能。它可以在我的笔记本电脑(运行 XAMPP 的 Mac Book Air)上完美运行,但不能在具有完全相同 php 文件(SMTP 主机、密码……)的实时服务器(新的 CentOS 6)上运行。以下是我从 PHPMailer 以详细模式获得的日志:
2015-04-08 02:59:42 Connection: opening to smtp.mywebsite.com:587, t=300, opt=array (
)
2015-04-08 02:59:42 Connection: opened
2015-04-08 02:59:42 SERVER -> CLIENT: 220 smtp.aliyun-inc.com MX AliMail Server(10.194.100.112)
2015-04-08 02:59:42 CLIENT -> SERVER: EHLO mywebsite.com
2015-04-08 02:59:42 SERVER -> CLIENT: 250-smtp.aliyun-inc.com
250-8BITMIME
250-AUTH=PLAIN LOGIN XALIOAUTH
250-AUTH PLAIN LOGIN XALIOAUTH
250-PIPELINING
250 DSN
2015-04-08 02:59:42 CLIENT -> SERVER: STARTTLS
2015-04-08 02:59:42 SERVER -> CLIENT: 220 Ready to start TLS
2015-04-08 02:59:42 CLIENT -> SERVER: QUIT
2015-04-08 02:59:44 SERVER -> CLIENT: ��:%4P���pGC#mLa+�%YF�l �0���I
2015-04-08 02:59:44 SMTP ERROR: QUIT command failed: ��:%4P���pGC#mLa+�%YF�l �0���I
2015-04-08 02:59:44 Connection: closed
2015-04-08 02:59:44 SMTP connect() failed.
虽然我花了很多时间在互联网上寻找解决方案,但我无法弄清楚问题出在哪里......我正在使用最新版本的 PHPMailer 并且命令行中的函数 mail 运行良好(我的意思是我收到了它们),那么问题出在哪里?
提前非常感谢!
Alplob
【问题讨论】:
-
“许多小时”显然不包括阅读PHPMailer's docs。
-
奇怪的是,您的服务器没有宣传 STARTTLS,但还是接受了该命令!也很奇怪,它在不需要 STARTTLS 的情况下宣传 AUTH。我会说邮件服务器的配置看起来很糟糕。
-
感谢您的回答。实际上,这似乎是中国的一个普遍问题。许多人在使用 phpMailer 和 Alicloud 服务器时遇到问题(即phpernote.com/php-template/430.htmlcloudbbs.org/forum.php?mod=viewthread&tid=20506),但我无法解决它......
-
禁用
stream_socket_client但仍然允许fsockopen是没有意义的。第二个例子是使用旧版本的 PHPMailer,这没有帮助,如果您需要进行这样的更改,正确的方法是子类化库并覆盖您想要更改的内容 - 您永远不应该编辑库本身,因为它破坏了您的升级能力。总体而言,您似乎正在使用一个残缺的 PHP 构建,与一个配置错误的邮件服务器通信,所以我对代码有问题并不感到惊讶!我建议找一个还不错的 ISP! -
非常感谢您的反馈,这让我走上了正轨。我实际上是使用 Remi 存储库中的 PHP 版本来获得最新版本(PHP 5.6),而不是使用官方 CentOS 6 存储库(PHP 5.3)中可用的版本。我回到了官方的,现在它可以工作了!