如何解决PHP邮件带有www-data
| 我正在尝试通过以下代码通过PHP的mail函数调用sendmail:$to = \'blah@email.state.edu\';
$subject = \'test\';
$message = \'test\';
$headers = \'From: mail@smartrek.blah.me\' . \"\\r\\n\" .
\'Reply-To: mail@smartrek.blah.me\' . \"\\r\\n\" .
\'X-Mailer: PHP/\' . phpversion();
mail($to,$subject,$message,$headers);
但是在我的mail.log中,我收到一条消息,发件人不是我在标头中指定的地址:
<www-data@Name>: Sender address rejected: Domain not found
为什么是这样??我在ubuntu上运行PHP的fast-cgi
为什么sendmail不使用我通过PHP代码指定的标头?
解决方法
看来ѭ2是您信封的“发件人”地址。信封的“发件人”地址与电子邮件的“发件人:”标题中显示的地址不同。这就是sendmail在与接收邮件服务器的\“ MAIL FROM / RCPT TO \”交换中使用的名称。其被称为\“ envelope \”地址的主要原因是出现在原始邮件的标题和正文之外邮件服务器之间的SMTP交换。
Unix上的默认信封“发件人”地址取决于您所使用的sendmail实现。但通常将其设置为正在运行的进程的用户名,后跟\“ @ \”和计算机的主机名。在典型配置中,该外观类似于
username@example.com
。
如果您的电子邮件被接收邮件服务器拒绝,或者需要更改退回电子邮件的发送地址,则可以更改信封“发件人”地址来解决问题。
要更改unix上的信封“发件人”地址,请为sendmail二进制文件指定一个“ -r”选项。通过在\“ sendmail_path \”命令行中添加\“-r \”选项,可以在php.ini中全局执行此操作。您还可以通过在PHP中以编程方式通过将-r mail@smartrek.blah.me
作为附加参数参数传递给mail()函数(第5个参数)来完成此操作。如果您在两个地方都指定了一个地址,则将使用两个\“-r \”选项来调用sendmail二进制文件,这些选项可能具有不确定的行为,具体取决于您的sendmail实现。使用Postfix MTA,以后的\“ -r \”选项将默默地覆盖以前的选项,从而可以设置全局默认值,并且在尝试在本地覆盖它时仍会表现出合理的行为。
编辑
关于可以传递给sendmail的可选标志:-f
将设置发件人地址,-r
将覆盖sendmail生成的默认返回路径(通常使用发件人地址)。如果您希望回弹到发件人地址以外的其他地址,请尝试同时使用两个标志:-f mail@smartrek.blah.me -r bounced-mail@smartrek.blah.me
我的php.ini
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25
; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = me@example.com
; For Unix only. You may supply arguments as well (default: \"sendmail -t -i\").
; http://php.net/sendmail-path
;sendmail_path =
; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(),even in safe mode.
;mail.force_extra_parameters =
; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On
; Log all mail() calls including the full path of the script,line #,to address and headers
;mail.log =
,尽管这是一个古老的问题,但我还是添加了此答案,以防对某人有所帮助:
我遇到了同样的问题,将From:
标头重写为www-data@host...
我最终将其跟踪到ssmtp网桥服务,该服务将邮件从我们的Web服务器传送到我们的邮件服务器。我在文件/etc/ssmtp/ssmtp.conf
中添加了行FromLineOverride=YES
,问题消失了。
,就我而言,我有一个托管服务器,因此我需要编辑此文件:
/etc/ssmtp/ssmtp.conf
然后取消注释此行:
FromLineOverride =是
完成后,交友标题将正常工作。
,发送和接收所有带有此标头的邮件时,我在www-data上也遇到类似的问题:
From: www-data <www-data@example.com>
我将-f info@example.com
标志用作PHP email()函数的第五个参数(如已接受的答案所述),但我仍收到以下电子邮件:
From: www-data <info@example.com>
因此,我又添加了一个标记-f info@example.com -F info
来设置电子邮件的全名,最后我得到了想要的电子邮件:
From: info <info@example.com>
我发布此答案是因为在这里没有人提及,我对此有些困惑。
,这为我工作:
$mail->Sendmail = $mail->Sendmail.\' -f \'.$mail_errorsto;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。