如何检查邮件服务器是否存在?

时间:2011-10-05 20:17:48

标签: php

我的PHP页面目前没有邮件服务器,而不是抛出错误,是否可以捕获此错误并将其打印给用户?

这是我到目前为止,它只是给出了一个错误。

<?php 
$foo = mail('test@test.com', 'subject', 'message');
if ( $foo == false )
{
echo "no mail server";
}
?>

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以使用fsockopen('servername / ipaddres',25)打开有问题的邮件服务器的端口;如果它返回内容,则表示端口已打开,您可以确定存在邮件服务器。

$errno = 0;
$errstr = '';
$fp = fsockopen("localhost", 25, $errno, $errstr, 5);
if (!$fp) {
    echo "No mail server responded on this server on port 25, validate your configuration";
}

这绝对是非常实验性的,你需要让自己参与更多的工作,但它应该让你开始:)

答案 1 :(得分:0)

mail()可能因其他原因而失败,而不仅仅是一个不存在的邮件服务器。我认为你能做的最好的事情就是优雅地失败并向用户显示你得到的信息,甚至有限制。

在PHP 5.1及更高版本中,您可以通过以下方式捕获错误:

error_reporting(0); // Don't display errors
$success = mail(....); 

if (!$success) 
 {
  echo "Mailing failed: Error message: ".error_get_last();
 }

如果您需要支持旧版本,我认为您没有选择显示来自mail()的原始错误消息 - 您理论上可以抑制它,但这不会向用户显示究竟出现了什么问题。