使用PHPMailer更改Return-path

16

有没有办法使用PHPMailer更改返回路径(return-path)

我尝试了以下方法,但没有成功

$mail->AddCustomHeader('Return-path:test@email.co.za');

我正在使用以下语句发送邮件

if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;

    } else {
        //Building the reporting email to report on all the mails send 
        echo "Message REPORT sent!\n";
    }

我收到了邮件,但退回路径没有改变?

6个回答

29
以下是解决了这个问题的方法,我调整了“发件人”属性并且它对我起作用了。 $mail->Sender = 'test@email.co.za';

好的,那个可行。那会在内部设置Return-Path。谢谢。 - Benjamin Piette

13

截至2013年7月,设置返回路径(returnpath)的正确方式是使用:

$mail->ReturnPath='bounce_here@domain.com';

phpmailer源代码中包含以下内容,这就是为什么我认为$mail->Sender有效的原因。

if ($this->ReturnPath) {
  $result .= $this->HeaderLine('Return-Path', '<'.trim($this->ReturnPath).'>');
} elseif ($this->Sender == '') {
  $result .= $this->HeaderLine('Return-Path', '<'.trim($this->From).'>');
} else {
  $result .= $this->HeaderLine('Return-Path', '<'.trim($this->Sender).'>');
}

2
这应该被标记为正确答案。 - cytsunny
4
在phpmailer的代码中已经解释了,这不再适用: /** * 消息的 Return-Path。 * 如果为空,则将设置为 From 或 Sender 中的一个。 * var string * 废弃:电子邮件发送方不应设置 return-path 标头; * 这是接收者的工作(RFC5321 第 4.4 节),因此这不再起作用。 * link https://tools.ietf.org/html/rfc5321#section-4.4 RFC5321 参考文献 */ - G Trawo
你好。我不明白为什么每个邮件解决方案(如Mailchimp等)都将退回路径设置为用户VERP地址以跟踪退信...我们不能使用PHPMailer做到这一点吗?为什么? - J. Doe

3
$mail->Sender = 'noreply@domain.com';

1

这种情况最可能的原因是你发送邮件的邮件服务器强制使用特定的返回路径。对于“托管”网络空间来说,这种情况经常发生。

在这种情况下,你并没有太多的选择。尝试与你的主机服务提供商沟通。


0
我们在SPF验证方面遇到了问题,尽管设置了DNS TXT记录。我们发现PHP Mailer在setFrom()方法中默认自动设置了Return-Path,具体请参考链接1。请注意第三个参数auto,简而言之,它执行的是$phpmailer->Sender = $phpmailer->From。但是,出于未知原因,WordPress将这个第三个参数设置为false,并没有提供任何更改的选项...具体请参考链接2。 $phpmailer->setFrom( $from_email, $from_name, false ); 因此,我们创建了一个具有其他优点的插件...

wp-content/plugins/phpmailer-fixes/init.php

/*
Plugin Name: PHPMailer Fixes
*/

// https://developer.wordpress.org/reference/functions/add_action/
// add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 )

add_action('phpmailer_init', 'phpmailer_init_fixes', 99, 1);

function phpmailer_init_fixes($phpmailer) {
    // FIX 1: Fix not setting Return-Path and breaking SPF validation
    $phpmailer->Sender = $phpmailer->From;

    // IMPROVEMENT 1: Remove default header: X-Mailer: PHPMailer X.Y.Z (https://github.com/PHPMailer/PHPMailer)
    $phpmailer->XMailer = false;

    // IMPROVEMENT 2: Add DKIM signature (you must set DNS TXT entry)
    $phpmailer->DKIM_domain = 'example.com';
    $phpmailer->DKIM_selector = 'wordpress';
    $phpmailer->DKIM_private = '/path/to/dkim.private.key';
}

-4

不要使用“Reply-path”头,试试这个:

$mail->AddCustomHeader('Reply-to:test@email.co.za');

我使用“回复”头部,在共享空间中也取得了很大的成功。


1
我是否误解了你?你是想更改发送失败消息和警告的路径,还是想更改人们回复的地址? - SimonDowdles
@Webfac,如果邮件无法投递,则会反弹回来,我需要知道它反弹到哪个地址,我认为唯一可能反弹的地址是回复路径。 - Elitmiar
@Roland - 是的,你说得对,我刚才误解了你。我认为没有理由回复路径不起作用,除非该标头被放置在您的标准收件人、发件人标头等之前?如果是这样,那么这很可能就是答案。 - SimonDowdles
@Webfac,我已经解决了这个问题,我做了以下操作:$mail->Sender = 'test@email.co.za'; - Elitmiar
@Roland - 很高兴你解决了这个问题,这意味着你正在使用的类中有一个名为Sender的函数,该函数显然将发送者地址应用于From:和Return-path头部的值。这种做法很奇怪,我更希望他们能给你提供隐式设置每个头部选项的选项!不过很高兴你成功解决了。 - SimonDowdles
@Webfac,我同意你的看法。至少现在我们知道了。 - Elitmiar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接