更改 PHP 邮件函数中的返回路径
Posted
技术标签:
【中文标题】更改 PHP 邮件函数中的返回路径【英文标题】:Change the Return-Path in PHP mail function 【发布时间】:2012-09-08 21:20:07 【问题描述】:是否可以更改通过 php 的 mail() 函数发送的电子邮件中的 Return-Path 值?
它的值是我在我的站点中发送的电子邮件中的“www-data@mydomain.com”,它会导致电子邮件传递失败过程中出现一些问题。我想将其设置为我的电子邮件地址。
这是我尝试过的代码:
$headers = 'MIME-Version: 1.0' . "\n";
$headers .= "Content-type: text/html; charset=utf-8" . "\n";
$headers .= "Return-Path: <adminemail@yahoo.com>"."\n";
$headers .= "Errors-To: <adminemail@yahoo.com>"."\n";
// Additional headers
$headers .= "To: email1@yahoo.com <adminemail@yahoo.com>" . "\n";
$headers .= "From: adminemail@yahoo.com <adminemail@yahoo.com>";
// Mail it
mail('email1@yahoo.com', 'test', 'salam', $headers, "f");
【问题讨论】:
【参考方案1】:只需定义返回路径
$returnPath = "-fadminemail@yahoo.com"; //-f will do the job
mail('email1@yahoo.com', 'test', 'salam', $headers, $returnPath);
【讨论】:
【参考方案2】:您可以在标题中设置回复和返回路径,如下所示
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'Return-Path: webmaster@example.com'
或 作为第五个参数调整返回路径
mail($to, $subject, $message, $headers, "-f email@wherever.com");
其中 email@wherever.com 应替换为您的邮件。
【讨论】:
尝试在 -f 后放置空格并检查。 "-f email@gmail.com" 我认为\r\n
需要用双引号,而不是单引号。
-f 选项对我有用。设置 Return-Path 标头(正如我在获得此答案之前所尝试的那样)不起作用,它已被系统覆盖。
在我的情况下 -femail@wherever.com
工作得很好,没有任何空间或任何东西。
我认为设置 Return-Path 标头是不正确的。接收 MTA 根据 Envelope.From 设置返回路径。由于这个原因,PHPMailer 停止允许在邮件标题中设置 Return-Path。见***.com/a/1247155/450127【参考方案3】:
问题是邮件格式要求标头使用\r\n
行尾...而不是\n
,其中的诀窍是一些服务器会同时接受两者(为您转换它们,它似乎可以神奇地工作)而其他服务器会考虑那些没有\r\n
结尾的人是无效的,基本上忽略你所有的标题。所以试试吧:
$headers = "MIME-Version: 1.0\r\n".
"Content-type: text/html; charset=utf-8\r\n".
"Return-Path: adminemail@yahoo.com";
mail ("email1@yahoo.com","test","salam",$headers);
顺便说一句,return-path 需要一个 RFC1123 邮箱(没有尖括号,只有电子邮件地址)......不确定为什么要像示例中那样设置 return-path,因为它与来自地址(太多余了)
【讨论】:
这只是节省了我的一天。我的返回路径被忽略并默认返回 www-data.. 从\n
更改为 \r\n
并且它按预期工作。
-1 因为这不能回答问题并给出非工作代码。你有一个随机的"f"
作为mail()
的最后一个参数。有一个-f
标志。只输入f
是错误的。以上是关于更改 PHP 邮件函数中的返回路径的主要内容,如果未能解决你的问题,请参考以下文章
如果从 php mail() 函数发送的电子邮件返回,它在 linux 中的位置?