【问题标题】:PHP mail function works sometimesPHP邮件功能有时有效
【发布时间】:2011-07-12 15:29:58
【问题描述】:

我正在编写一个需要通过 PHP 邮件功能发送电子邮件的脚本。如下所述,它在向 gmail 帐户发送电子邮件时有效,但不适用于我域上的帐户。我们正在运行 Exchange 服务器。截至目前,电子邮件是从 _www@server 发送的。有谁知道 php 邮件和 Exchange 的问题(或者甚至可能是以下划线和 Exchange 开头的电子邮件地址??)?或者这里可能还有另一个问题?无论如何,mail 函数都会返回 true。

谢谢,

杰夫

$user = $_POST['email'];

$to = "someone@domain.org";

$subject = "Request to Reset EduTube Password";

$body = "Thank you " . $_POST['email'] . " for using the EduTube Password Reset System.\n\n";
$body .= "Please click the following link, or copy & paste it into your browser to reset your password.\n\n";
$body .= "http://testing.domain.org/reset.php?user=" . $user;

$headers = "From: someone@domain.org";

$from = "EduTube Password Reset System";

if (mail($to, $subject, $body, $headers)){

echo "Your email has been sent.  Please check your inbox shortly.";
echo "<br/><a href='http://testing.domain.org'>Click</a>";

}

【问题讨论】:

  • mail 是否已经返回 false 或者消息“只是未送达”?
  • 您可以查看 Exchange 日志吗? mail 仅在邮件被接受发送时返回 true
  • @hakre 邮件函数始终返回 true。如果该帐户是我的 gmail 帐户,我会收到电子邮件。如果是我的工作帐户,我不会。我已经检查过垃圾邮件等。此外,服务器日志上没有我可以告诉的任何内容。
  • @adam 很遗憾,我无权访问 Exchange 日志。我已向我们的系统管理员请求他们。我想知道在到达那一点之前是否有人看到或知道一些明显的东西。谢谢!
  • 当我自己的域使用 Google 发送电子邮件时,我总是遇到问题。这是否描述了您的情况?

标签: php email exchange-server


【解决方案1】:

mail() 的传递函数在将您的邮件交给 SMTP 服务器时结束。它的唯一职责是在现实世界中将您的信封放入角落的邮箱中。邮政服务的其余部分(清空那个盒子,通过处理中心运行它,将它飞到收件人的国家/城市等......)完全超出了 mail() 的范围。只要信封落入邮箱,mail() 就会返回 true 并假装它已送达。

所以...检查您的 SMTP 服务器的日志,看看邮件到底发生了什么。也许它被接收者标记为垃圾邮件并被退回。也许它卡在某处的队列中,等等......只有日志会告诉你这一点 - 你可以在 PHP 中看到/做的任何事情都是无用的,因为 PHP 和 mail() 可能只完成电子邮件发送/传递过程的 1%,其他 99% 有问题。

【讨论】:

  • 另外:添加Return-Path 标头对于将退回的邮件传递到真实收件箱很有用。
  • @hakre - 许多服务器配置为不发送退回报告
  • @adam:嗯,它帮助我追踪了很多次我需要它的东西。检查日志要好得多,但是,嗯,有些服务器甚至会在日志中留下消息而直接丢弃,对吧?
  • @Marc B 谢谢,我会看看 SMTP 日志,如果我在那里找到任何东西,我会发布。
  • @hakre 我也会试试这个。伤不起!
猜你喜欢
  • 2010-11-25
  • 2012-02-27
  • 1970-01-01
  • 2010-12-05
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
相关资源
最近更新 更多