【问题标题】:Do we really need -f flag in PHP mail? Why?我们真的需要在 PHP 邮件中使用 -f 标志吗?为什么?
【发布时间】:2015-03-14 03:06:59
【问题描述】:

我一直在我的 php 应用程序中包含 -f 标志,因为我认为它很重要,正如文档告诉我们的那样:

应将运行网络服务器的用户添加为受信任用户 到 sendmail 配置以防止出现“X-Warning”标头 当使用设置信封发件人 (-f) 时将其添加到邮件中 这种方法。对于 sendmail 用户,此文件为 /etc/mail/trusted-users。

所以它看起来像是用来防止欺骗 - 通过验证我是谁。然后我做了一个实验。事实证明,如果我不包含 -f,我发送邮件时仍然不会出现 X-Warning。事实上,发件人甚至不需要是我自己。例如,我尝试将Obama@whitehouse.org 作为发件人,但我收到了没有任何警告的电子邮件。我什至尝试使用Obama@whitehouse.org 向多个电子邮件帐户发送数百封电子邮件,但它们没有被标记为垃圾邮件。

所以,我的问题是,-f 标志到底有什么作用(因为在我看来,没有它,电子邮件会正常发送)?

【问题讨论】:

  • “他们没有被标记为垃圾邮件” WhiteHouse.org(不是白宫,顺便说一下,就是 .gov)没有 SPF 记录,这是让您有时摆脱它。你应该使用真正的邮件类,比如 SwiftMailer,不要再担心 sendmail 标志了。
  • @ceejayoz 我明白了,所以如果我使用具有 SPF 记录的 WhiteHouse.gov,我会在没有 -f 标志的情况下被标记吗?那很有意思。谢谢。你能给出答案吗?
  • 可能被标记。 WhiteHouse.gov 在他们的记录中使用~all,因此它不会向电子邮件服务器提供最有用的信息来将您的邮件标记为垃圾邮件。垃圾邮件过滤器适用于很多方面,包括内容和发送 IP 的声誉。
  • @ceejayoz 你是对的。我刚试过obama@whitehouse.gov,它被标记为垃圾邮件。
  • @ceejayoz 并带有 -f 标志,电子邮件确实通过了!这太疯狂了。我现在也要看看 swiftmailer。 :) 如果您将评论作为答案,我将接受它作为正确答案。

标签: php email


【解决方案1】:

-f 标志用于指定envelope sender 地址。您应该使用 -f 标志来设置此地址,使其与邮件标头中的FROM 地址匹配,否则某些垃圾邮件过滤器将更有可能将邮件视为垃圾邮件,因为两者都不匹配。

您可以执行以下操作来设置两者,以便它们匹配:

$to = "to@to.com";
$from = "from@from.com";
$subject = "subject";
$message = "this is the message body";

$headers = "From: $from"; 
$ok = @mail($to, $subject, $message, $headers, "-f " . $from);   

【讨论】:

  • 所以将其留空等于将其设置为与我假设的FROM 匹配?因为我在发送FROM: <Obama@whitehouse.org>时尝试将其留空。
  • 没有。省略 -f 标志很可能会导致 PHP 使用 php.ini 中为 sendmail_from 设置的任何内容作为信封发件人。因此,它与您在标题中为 FROM: 地址设置的内容不匹配。
  • 这基本上不是 PHP 中的一个错误,即-f 标志默认设置与From: 不同吗?
  • 在 SMTP 中,邮件的envelope senderFROM address in the message headers 不一定相同。因此,这种异常并非特定于 PHP - 甚至不是 PHP 将消息传递给的底层 MTA。如果有的话,那是 SMTP 的异常。但是,有一些合理的原因导致两者可能不匹配。见serverfault.com/questions/518119/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多