我在Linux上使用PHP和Sendmail一起使用PHP。我使用PHP mail
函数。电子邮件已发送,但信封中Apache_user@localhostname
位于MAIL FROM
(例如nobody@conniptin.internal),而某些远程邮件服务器拒绝此邮件,因为该域名不存在(显然)。使用mail
,我可以强制它更改信封MAIL FROM
吗?
编辑:如果我在mail
()函数的第四个字段中添加标题,则会更改邮件正文标题中的From
字段,并且不会更改信封MAIL FROM
。
我可以通过使用sendmail -t -odb -oi -frealname@realhost
生成sendmail并将电子邮件内容汇总到它来强制它。这是一种更好的方法吗?
有没有更好,更简单,更适合PHP的方法呢?
编辑:底线是我应该有RTM。谢谢你的回答,第五个参数有效,一切都很顺利。
答案 0 :(得分:66)
mail()有第4个和第5个参数(可选)。第五个参数是应该作为选项直接传递给sendmail的内容。我使用以下内容:
mail('to@blah.com','subject!','body!','From: from@blah.com','-f from@blah.com');
答案 1 :(得分:2)
PHP Official documentation for mail()
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
...
additional_parameters(可选)
additional_parameters 参数可用于传递其他内容 flags作为配置为使用的程序的命令行选项 发送邮件时,由
sendmail_path
配置定义 设置。例如,这可用于设置信封发件人 将sendmail与-f
sendmail选项一起使用时的地址。此参数在内部由
escapeshellcmd()
转义以防止 命令执行。escapeshellcmd()
阻止命令执行,但是 允许添加其他参数。出于安全原因,它是 建议用户清理此参数以避免添加 shell命令的不需要的参数。由于
escapeshellcmd()
自动应用,因此会有一些字符 允许作为互联网RFC的电子邮件地址不能使用。 邮件()强> 不能允许这样的字符,所以在程序里面使用这样的字符 字符是必需的,发送电子邮件的替代方式(如 建议使用框架或库。应将Web服务器运行的用户添加为受信任的用户 到sendmail配置以阻止“
X-Warning
”标头 使用时设置信封发件人(-f
)时添加到邮件中 这种方法。对于sendmail用户,此文件为/etc/mail/trusted-users
。
答案 2 :(得分:1)
你可以试试这个(我不确定):
ini_set("sendmail_from", yourmail@example.com);
mail(...);
ini_restore("sendmail_from");
答案 3 :(得分:1)
我还建议您查看PHPMailer。它非常适合创建和发送电子邮件,使流程更容易,同时支持SMTP。
答案 4 :(得分:-9)
您实际需要做的是更改运行Apache的计算机的主机名,以及正在运行的用户。
在目前的情况下,它是:
更改这两个值非常简单,可以解决问题的根源。
虽然如果你需要从PHP那里做,那么也许可以使用system/exec
函数。我认为它不会在实践中起作用,因为你需要重新启动Apache,也可能需要重新启动整个主机以便使用新名称。