【发布时间】:2014-10-27 00:22:31
【问题描述】:
我正在尝试设置一个 php 页面以自动发送验证电子邮件。我想使用 gmail smtp 服务器,而且我看到的任何地方都建议使用PHPMailer。我安装了它并使用了以下示例代码:
ini_set('display_errors', 1);
error_reporting(E_ALL);
require_once ("incl\PHPMailer\PHPMailerAutoload.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Host = "smtp.gmail.com";
$mail->Port = 587;
$mail->Username = "myemail@gmail.com";
$mail->Password = "mypassword";
$mail->SetFrom('myemail@gmail.com','Me');
$mail->AddAddress("ToAddress@gmail.com");
$mail->Subject = "Verify your email";
$mail->Body = "Thank you for signing up. Please verify your email using the link below:";
$mail->IsHTML (true);
if($mail->Send()){
echo "Success";
}else{
echo "Error";
}
当试图通过 Firefox 访问页面时,页面会加载几分钟,然后报错:
500 - 内部服务器错误。
您要查找的资源有问题,无法显示。
服务器是 Windows Server 2008 R2 Standard,运行 IIS 7.5 和 PHP 版本 5.5.8。我可以毫无问题地访问所有其他页面,但尝试调用 $mail->Send() 似乎超时或什么的。我知道这一点,因为我评论了每一行并慢慢添加了一些片段,$mail->Send() 是导致该行为的行。
我的 Google 能力在这里让我失望,因为我根本不知道如何完成这项工作。关于可能出错的任何想法?
更新
我打开了服务器日志,然后尝试再次加载页面,但日志中没有添加新的错误。但是,我从今天开始在System32\LogFiles\httperr1.log 中注意到以下错误
2014-10-27 06:29:21 1.161.23.122 3148 212.83.145.123 80 HTTP/1.0 CONNECT mx2.mail2000.com.tw:25 400 - URL -
2014-10-27 10:10:12 95.183.244.244 33553 212.83.145.123 80 HTTP/1.1 GET / 400 - Hostname -
2014-10-27 11:25:25 207.38.185.197 51157 212.83.145.123 80 HTTP/1.1 GET /tmUnblock.cgi 400 - Hostname -
2014-10-27 12:46:21 1.168.221.158 7952 212.83.145.123 80 - - - - - Timer_ConnectionIdle -
更新 2
我确信我的 gmail 帐户详细信息是正确的,并且已经在服务器上使用 Thunderbird 测试了从它发送的信息。当尝试在没有安全方法的情况下发送时,如 this comment 中所建议的,我收到此错误:
MAIL FROM 命令失败,550,5.7.3 请求的操作已中止;用户未通过身份验证
我的 PHP Mailer 版本是 5.2.9,我现在还尝试了以下方法:
- 在文件路径中使用
\\而不是\- 没有变化
- 包括
class.phpmailer.php而不是PHPMailerAutoload.phpFatal error: Class 'SMTP' not found in C:\inetpub\wwwroot\incl\PHPMailer\class.phpmailer.php on line 1195
- 在端口 465 上使用 ssl
SMTP connect() failed
- 通过端口 25 使用 hotmail 地址发送
$mail->SMTPAuth = false;MAIL FROM command failed,550,5.7.3 Requested action aborted; user not authenticated
更新 3
重新加载问题页面后,我通过事件查看器查看并在 Windows 日志 -> 系统中看到了一个新条目:
PHP 错误:语法错误,第 101 行 C:\PHP\php.ini 中的意外 BOOL_TRUE
那一行是:
php_flag display_errors on
【问题讨论】:
-
错误 500 本身没有意义。您应该在 Web 服务器日志中找到有意义的错误消息。要么,要么在您的脚本或 php.ini 中将
display_errors设置为 true 以使其可见。这不是 PHPMailer 特有的——对于任何 PHP 致命错误都是如此。 -
我尝试将
ini_set('display_errors', 1);添加到脚本的顶部,但它并没有改变输出。使用日志文件中的一些详细信息更新了问题。 -
如果您在浏览器中看到 500 个错误,但没有记录任何内容,则说明您的 Web 服务器配置有问题。您显示的错误是 400(错误请求)错误。您还应该尝试打开错误报告:
error_reporting(E_ALL); -
@Synchro 我尝试在页面上添加
ini_set('error_reporting', 'E_ALL');以及在php.ini 中添加error_reporting = E_ALL,但都没有更改错误消息。你能指出我如何验证服务器配置的正确方向吗? -
error_reporting是一个函数 - 完全使用我发布的内容 - 你输入的内容本身会导致 500 错误!
标签: php iis-7.5 phpmailer windows-server-2008-r2