从 PHP 发送 MIME 电子邮件时,Exim 会覆盖“发件人”标头

Posted

技术标签:

【中文标题】从 PHP 发送 MIME 电子邮件时,Exim 会覆盖“发件人”标头【英文标题】:Exim overwrites "from" header when sending MIME email from PHP 【发布时间】:2011-05-31 09:27:35 【问题描述】:

我正在使用 php Pear Mail_Mime 库来发送电子邮件。在我的脚本中,我在发送消息之前设置了“发件人:”标头。这一切在运行 Mac OS X 的服务器上运行良好,(它可能使用 sendmail 作为邮件程序,虽然我不是 100% 确定。)发送测试电子邮件时,“发件人:”字段显示正确的发件人。

但是,如果我在使用 Exim4 作为邮件程序的 Linux 服务器上运行相同的脚本,电子邮件仍会发送,但默认显示“发件人:”标题,而不是我在脚本中指定的标题。

我已经尝试在PHP的邮件功能的“附加参数”中设置“-f [来自电子邮件地址]”选项,但这似乎没有效果。

谁能告诉我如何让 from 标头与 Exim 一起正常工作?

非常感谢任何建议。

干杯, 汤姆

编辑:这是代码,以防有人有兴趣查看它。

<?php include_once('Mail.php'); include_once('Mail/mime.php'); $subject = "mime mail test"; $from = "wtf@domain.com"; $to = "wtf@domain.com"; $visitor_email = $from; $message = new Mail_mime(); $message->setTXTBody("hallo there!"); $body = $message->get(); $extraheaders = array("From"=>$from, "Subject"=>$subject,"Reply-To"=>$visitor_email); $headers = $message->headers($extraheaders); $mail = Mail::factory("mail"); $result = $mail->send($to, $headers, $body, "", "-f wtf@domain.com -r wtf@domain.com"); print_r($result); ?>

【问题讨论】:

尝试将Return-path 标头明确设置为与回复和/或发件人相同的标头。此外,Mail::send 仅支持您提供的前 3 个参数,假设您使用的是 PEAR Mail 类。 啊,谢谢——关于 PEAR 邮件类,我没有意识到这一点。 原来这是***.com/questions/4663040/…的副本 【参考方案1】:

您通过命令行发送(与 SMTP 相比)。 Exim 只允许受信任的发件人使用-f 选项。要么:

将其更改为使用 SMTP(这将允许您使用任何您想要的发件人,前提是您完全可以发送电子邮件(这通常意味着基于 IP 或基于身份验证的控制) 从受信任的用户(如 root 或 exim 用户)发送

将发送邮件的用户添加到 exim 配置中的受信任用户列表中,如下所示:

trusted_users = root:apache:www:exim:60001

【讨论】:

我尝试了trusted_users 方法以及切换到SMTP,但问题仍然存在。我想我可能已经发现了这个问题,即 exim 被配置为通过 GMail 发送电子邮件,并且显然设置为作为一个用户发送所有电子邮件。但是,我仍然不确定需要更改什么来解决问题。不过,非常感谢您提供的信息。 请看***.com/questions/4663040/…

以上是关于从 PHP 发送 MIME 电子邮件时,Exim 会覆盖“发件人”标头的主要内容,如果未能解决你的问题,请参考以下文章

使用 S/MIME (PHP) 发送带有附件的电子邮件

PHP 发送 MIME 电子邮件...不再起作用

Exim:将邮件保存到唯一文件

使用 PHP 的邮件发送 mime 编码电子邮件的正确格式

是否可以在不使用 MIME 的情况下使用包含 CSS 装饰的 PHP 发送 html 电子邮件?

通过邮件 mime php 来自附件的文件名