【发布时间】:2013-01-04 09:48:54
【问题描述】:
我从几个小时以来一直在尝试让邮件脚本在实时服务器上运行。它在我的本地主机上按预期工作。
我也使用完全相同的外部 SMTP 服务器、相同的 PHP 源和相同的数据库表。 PHP版本和MySQL版本在线和localhost是一样的。
我测试了一切。在没有物理发送过程的情况下,一切都像假装一样工作。它不发送(或接收)电子邮件。我还去找系统管理员让他检查是否有任何电子邮件被阻止或内部服务器错误,但这里也一切正常。
我真的尝试了我能想到的一切,但我没有发现问题。有人知道我接下来可以尝试什么吗?
物理发送的函数如下所示:
private function sendPhysical($sReciepient) {
if ($oSmtpIn = fsockopen(SMTPSERVER, SMTPPORT)) {
fputs($oSmtpIn, "EHLO " . SMTPSERVER . "\r\n");
$aCodes["hello"] = fgets($oSmtpIn, 1024);
fputs($oSmtpIn, "auth login\r\n");
$aCodes["res"] = fgets($oSmtpIn, 1024);
fputs($oSmtpIn, $this->encodeUser() . "\r\n");
$aCodes["user"] = fgets($oSmtpIn, 1024);
fputs($oSmtpIn, $this->encodePassword() . "\r\n");
$aCodes["pass"] = fgets($oSmtpIn, 256);
fputs($oSmtpIn, "MAIL FROM: <" . $this->sFrom . ">\r\n");
$aCodes["From"] = fgets($oSmtpIn, 1024);
fputs($oSmtpIn, "RCPT TO: <" . $sReciepient . ">\r\n");
$aCodes["To"] = fgets($oSmtpIn, 1024);
fputs($oSmtpIn, "DATA\r\n");
$aCodes["data"] = fgets($oSmtpIn, 1024);
fputs($oSmtpIn, $this->generateHeader($sReciepient) . "\r\n\r\n" . $this->returnCompiledTemplate() . "\r\n.\r\n");
$aCodes["send"] = fgets($oSmtpIn, 256);
fputs($oSmtpIn, "QUIT\r\n");
fclose($oSmtpIn);
} else {
$aCodes["connection"] = false;
}
return $aCodes;
}
任何人都有可能的解决方案?我很困惑,因为它可以在本地主机上运行,并且直到上周它已经在在线服务器上运行了......
【问题讨论】:
-
那么,实际的错误是什么?你看到/得到什么?您很可能必须查看网络级别。可能您可以在服务器响应中发现一些问题。我敢打赌这与中继有关。难道你正在使用你的 ISP 的 smtp 服务器?如果是这样:中继问题,服务器规则不接受来自外部(您的在线服务器)的任何人通过它中继消息。
-
我没有看到任何实际错误,除了邮件没有发送。不,我正在使用我实习的公司的 smtp 服务器(我还是学生)。系统管理员检查了日志,但没有找到任何东西.. :/
-
没有什么会突然停止工作。如果您的代码没有更改,那么它必须是发生更改的网络的其余部分。正如已经指出的,中继/MTA?
-
但是,如果我从本地电脑访问 smtp,它会工作,而如果我上传它就不能工作,怎么会发生这种情况?这对我来说似乎不合逻辑..它是完全相同的 smtp 服务器..
-
那么,您在读取并存储到代码变量中的这些回复中得到了什么?你似乎没有评估那些,所以难怪你没有看到错误......