Roc*_*aco 10 php apache postfix-mta sendmail phpmailer
我使用mail()函数使用PHP成功发送邮件,但发送显示为服务器地址,而不是我在脚本中配置的内容.Postfix安装在apache服务器上.在ServerFault的答案我读取使用-f和-r标志,但这不能像这样工作:
mail($to, $subject, $message, $headers,'From: ' . $fromname . ' <'.$from.'>', "-f $from -r mybounceemail@example.com");
Run Code Online (Sandbox Code Playgroud)
我能做的最好的事情是将Postfix myorigin(本地机器名称hostname)更改为机器名称的父域.
这让我相信Postfix忽略或剥离From:元素?
mail($to, $subject, $message, $headers,'From: ' . $fromname . ' <'.$from.'>', "-f $from -r mybounceemail@example.com");
Run Code Online (Sandbox Code Playgroud)
无法工作,因为mail()只接受5个参数:bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
对我而言
mail($to, $subject, $message, null, "-r sender@example.com");
mail($to, $subject, $message, 'Name <something@example.com>', "-r sender@example.com");
Run Code Online (Sandbox Code Playgroud)
work(我在postfix中没有任何额外的限制,可能会重写发件人).还要确保发件人格式正确(没有空格或任何空格).
但是,我建议您调整sendmail_pathphp.ini中的设置以包含"-r mybounceemail@example.com"参数.
如果它不适合您,您应该在此处发布邮件标题并检查日志文件是否有警告/错误.
PS:请确保您没有直接将用户输入的数据传递给mail(),因为如果用户可以插入换行符(例如\nCC: something@example.com主题,邮件或邮件),您的服务器可能会被用于发送垃圾邮件.
您在调用中获得了标头参数mail()两次,因此,您的$additional_parameters参数没有被使用,因为它是只接受 5 的函数中的第 6 个参数。您应该将标头移动到包含在其余标头中:
//Be mindful to protect from email injection attacks.
$fromname = str_replace("\n", "", $fromname);
$from = str_replace("\n", "", $from);
//This assumes that $headers is already set, containing your other headers
$headers .= 'From: ' . $fromname . ' <'.$from.">\n";
mail($to, $subject, $message, $headers, "-f $from -r mybounceemail@example.com");
Run Code Online (Sandbox Code Playgroud)
使用这个,我希望你的第五个参数现在是多余的,可以简化为:
$fromname = str_replace("\n", "", $fromname);
$from = str_replace("\n", "", $from);
$headers .= 'From: ' . $fromname . ' <'.$from.">\n";
mail($to, $subject, $message, $headers);
Run Code Online (Sandbox Code Playgroud)
您可以让Postfix执行其作业重写标头并添加适当的From:地址.为此,Postfix有sender_canonical_maps.
假设您的Web服务器(或进程管理器)在用户名下运行username,并且您希望support@example.com在From:电子邮件的标题中包含而不是不清楚username@servername.example.com.然后,规范地图将包含:
#/etc/postfix/canonical
username support@example.com
Run Code Online (Sandbox Code Playgroud)
配置Postfix使用它不容易:
postmap /etc/postfix/canonical
postconf -e sender_canonical_maps=hash:/etc/postfix/canonical
Run Code Online (Sandbox Code Playgroud)
另一种选择是告诉后缀,以纪念所有的电子邮件从你的服务器发送从发送support@example.com的手段luser_relay:
postconf -ev luser_relay=support@example.com
Run Code Online (Sandbox Code Playgroud)
如果你不能这样做,很可能有人已经为你做了这个,但做错了.这可能是您无法更改From:地址的原因,因为它被Postfix强制覆盖.
| 归档时间: |
|
| 查看次数: |
1410 次 |
| 最近记录: |