这已经连续3天在嘲笑我了。我已经安装了pear,并且脚本很好,因为我已经在许多其他项目中使用了它。我的问题是我能得到什么理由
Failed to connect to mail.domain.co.uk:25 [SMTP: Failed to connect socket: Connection timed out (code: -1, response: )]
我已经尝试了几个不同的帐户和gmail帐户,我使用的代码是从stackoverflow有50+票,所以必须工作!是否存在任何服务器端限制?我的代码如下:
<?php
require_once "/usr/local/lib/php/Mail.php";
$from = "<notifications@domain.co.uk>";
$to = "<doe@domain.co.uk>";
$subject = "Hi!";
$body = "Hi,'n'nHow are you?";
$host = "mail.domain.co.uk";
$username = "notifications.domain.co.uk";
$password = "fu*****";
$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)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>
如果你能帮上忙就太好了
我认为这与珍珠邮件无关。尝试在执行PHP的机器上执行telnet mail.domain.co.uk 25
。如果你也有超时,那不是PEARMail,而是网络。它可以是任何原因:防火墙,路由,之间的一些链接等。
基本上,发送邮件失败的阶段是在端口25上建立到邮件服务器的TCP连接。首先调试,当你可以建立一个telnet
连接-我相当确定你的PHP也会工作。
—edit—
我又想起了一件事。如果你碰巧在本地的家庭机顶盒上运行这个程序,连接到你的标准家庭DSL运营商,他们中的许多人会阻止出口端口25。在这种情况下,他们使用所谓的smarthost
,基本上是在他们自己的处所上的SMTP中继,它将接受从您发送到任何地址的任何邮件。在你的ISP的网页上寻找它,他们必须让它知道,然后使用它而不是mail.domain.co.uk。
——edit2——
那我们就排除珍珠邮件吧。
试试下面的一小段代码作为一个单独的脚本:
<?php
$fp = fsockopen("mail.domain.co.uk", 25, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />'n";
} else {
echo "I'm connected!<br />'n";
fclose($fp);
}
?>
这应该排除PEARMail,因为这是一个非常简单的穷人telnet替代品。