PHP邮件无限期挂起 - 如何调试?

时间:2012-01-30 12:17:11

标签: php email pear

我已经设置了一个简单的邮件系统,类似于以下内容:

$from = 'me <me@me.com>';
$to = 'you <you@you.com>';
$subject = 'subject';
$body = 'body';

$host = 'www.me.com';
$headers = array('From' => $from, 'To' => $to, 'Subject' => $subject);

$smtp = Mail::Factory('smtp', array('host' => $host, 'auth' => true,
                      'username' => 'username', 'password' => 'password'));
$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
    throw new Exception('emailException');
}

当我尝试运行脚本时,浏览器(chrome)会无限期地挂起。抛出没有异常,浏览器没有显示错误页面,只是坐着等待响应(超过12分钟,我离开的时间最长)。

我的实际程序略有不同(代码包含在一个函数中,信息作为参数传递)。我已经使用静态调试并确认传入的参数是正确的,但它只是从来没有错误,所以我甚至无法测试$ mail中的任何错误信息。

有谁知道我应该如何调试这个?

更新我可以在调用$ smtp-&gt;发送(...)

时确认该页面挂起

2 个答案:

答案 0 :(得分:0)

调试这个可以在日志文件中完成,你可能会发现一些PEAR错误。

此外,您可以通过每行代码之间的echo语句进行调试,以便准确了解它的挂起位置。

尝试连接到非现有主机时可能会出现长时间延迟。所以这就是我开始搜索的地方,虽然12分钟非常长。您需要使用PEAR类,因为您需要通过指定的SMTP服务器发送?

答案 1 :(得分:0)

IME,超过99%报告的关于PHP邮件功能的错误都是邮件问题,既没有PHP也没有它的界面。

为什么要尝试直接连接到服务器而不是使用PHP的mail()?

你有机器的shell访问权限吗?它使以下更简单,但您可以从PHP中执行这些操作。

你能解析smtp服务器主机名吗?

你能连接到smtp服务器上的端口25吗?

如何实施身份验证? (应包含在response to your EHLO

如果你有shell访问权限,那么通过日志代理路由连接或捕获usnig tcpdump / wireshark,看看连接被卡住了。

邮件服务器很可能没有实现正确的SMTP,并且验证失败。