如何使用PHP邮件从地址更改信封?

cod*_*nny 34 php email

我在Linux上使用PHP和Apache,使用Sendmail.我使用PHP mail函数.该邮件被发送,但信封中Apache_user@localhostnameMAIL FROM(例如nobody@conniptin.internal)和一些远程邮件服务器拒绝这一点,因为域不存在(显然).使用mail,我可以强迫它改变信封MAIL FROM吗?

编辑:如果我在mail()函数的第四个字段中添加一个标题,它会更改From邮件正文标题中的字段,并且不会更改信封MAIL FROM.

我可以通过生成sendmail sendmail -t -odb -oi -frealname@realhost并将电子邮件内容传送给它来强制它.这是一种更好的方法吗?

是否有更好,更简单,更适合PHP的方法?

编辑:底线是我应该有RTM.谢谢你的回答,第五个参数有效,一切都很好.

Luc*_*man 68

mail()有第4和第5个参数(可选).第五个参数是应该作为选项直接传递给sendmail的内容.我使用以下内容:

mail('to@blah.com','subject!','body!','From: from@blah.com','-f from@blah.com');
Run Code Online (Sandbox Code Playgroud)

  • @Lucas Oman:+1你的答案是对的,只是想警告几乎所有共享主机服务(cPanel/WHM)上的任何人可能感兴趣的PHP邮件功能第5个参数`-f ...`被`SAFE MODE禁用限制有效并且只是显示PHP警告而不更改默认信封 - 因此,在这些情况下您的答案将不是一个选项.关于Devon注释,无法在共享主机上更改`/ etc/mail/trusted-users`,因为属于主服务器配置. (8认同)
  • 注意:您可能还需要将发件人添加到/ etc/mail/trusted-users. (2认同)
  • 添加到我的最后一条评论中,自 PHP 5.3.0 [ref. http://php.net/manual/en/features.safe-mode.php]因此,如果您的共享托管服务仍然有它,您可以向其技术支持投诉。当 PHP `safe_mode` 为 `Off` 时,Lucas Oman 的答案完美运行。 (2认同)