更改 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 中的位置?

提交数据库php后如何处理电子邮件发送失败

Laravel 5.7中的电子邮件验证语言文件

php中的邮件技术

php 更改来自电子邮件和电子邮件中的姓名发送请求报价,以及客户的电子邮件和姓名。

PHP Mail 函数