我试图通过PHP的邮件功能通过以下代码调用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);
Run Code Online (Sandbox Code Playgroud)
但是在我的mail.log中,我收到一条消息,指出from不是我在标题中指定的地址:
<www-data@Name>: Sender address rejected: Domain not found
Run Code Online (Sandbox Code Playgroud)
为什么是这样??我在ubuntu上运行PHP的fast-cgi为什么sendmail不使用我通过PHP代码指定的头文件?
anu*_*ava 25
它看起来像是www-data@Name你的信封"来自"地址.信封" 发件人"地址与电子邮件"发件人:"标题中显示的地址不同.这是什么样的sendmail在使用"MAIL FROM/RCPT TO"与接收邮件server.The主要原因,它被称为"信封"的地址交换是出现外界消息标题和正文,邮件的原始SMTP交换服务器.
unix上的默认信封"from"地址取决于您正在使用的sendmail实现.但通常会将其设置为正在运行的进程的用户名,后跟"@"和计算机的主机名.在典型的配置中,这看起来像username@example.com.
如果您的电子邮件被接收邮件服务器拒绝,或者您需要更改退回电子邮件发送到的地址,您可以更改信封"从"地址以解决您的问题.
要更改unix上的"from"地址信封,请为sendmail二进制文件指定"-r"选项.您可以通过在"sendmail_path"命令行中添加"-r"选项在php.ini中全局执行此操作.您也可以通过将做到这一点编程在PHP -r mail@smartrek.blah.me作为附加参数参数邮件()函数(第5参数).如果在两个位置都指定了一个地址,则将使用两个"-r"选项调用sendmail二进制文件,这可能具有未定义的行为,具体取决于您的sendmail实现.使用Postfix MTA,以后的"-r"选项会静默覆盖先前的选项,从而可以设置全局默认值,并且当您尝试在本地覆盖它时仍然可以获得合理的行为.
关于可以传递给sendmail的可选标志: -f将设置From地址,-r将覆盖sendmail生成的默认返回路径(通常使用From地址).如果您希望退回的地址不同于from地址,请尝试同时使用两个标志:-f mail@smartrek.blah.me -r bounced-mail@smartrek.blah.me
[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 =
Run Code Online (Sandbox Code Playgroud)
虽然这是一个老问题,但我添加了这个答案,以防它对某人有所帮助:
我有同样的问题,From:重新写入标题www-data@host...我最终跟踪到ssmtp桥接服务,该服务将来自我们的Web服务器的邮件传送到我们的邮件服务器.我FromLineOverride=YES在文件中添加了一行,/etc/ssmtp/ssmtp.conf问题就消失了.
就我而言,我有一个托管服务器,所以我需要编辑这个文件:
/etc/ssmtp/ssmtp.conf
然后取消注释这一行:
FromLineOverride = YES
完成后,个人标题正在运行.
| 归档时间: |
|
| 查看次数: |
47189 次 |
| 最近记录: |