我试图找出使用 PHPMailer 时如何设置 DSN。我知道在 SMTP 协议级别,DSN 在 RCPT TO 之后指定,例如 RCPT TO: NOTIFY=SUCCESS,FAILURE ORCPT=rfc822;recipientemail@gmail.com
另外,如果可能的话,我想将 DSN 定向到发件人地址以外的地址。感谢任何指针,谢谢。
我发现PHPMailer不支持DSN,所以我不得不自己修改class.smtp.php。
原始代码:
fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF);
改成:
fputs($this->smtp_conn,"RCPT TO:<" . $to . "> NOTIFY=SUCCESS,FAILURE ORCPT=rfc822;" . $to ."" . $this->CRLF);
至于将 DSN 定向到发件人地址以外的地址,这可以通过定义来实现:
$mail->Sender = "bounced@email.com";
我只是测试,它对我有用,修改class.smtp.php
原始代码:
public function recipient($toaddr)
{
return $this->sendCommand(
'RCPT TO',
'RCPT TO:<' . $toaddr . '>',
array(250, 251)
);
}
例如,更改为:
public function recipient($toaddr)
{
return $this->sendCommand(
'RCPT TO',
'RCPT TO:<' . $toaddr . '> NOTIFY=SUCCESS,FAILURE ORCPT=rfc822;',
array(250, 251)
);
}
在我能看到的 smtp 文件中没有 fputs($this->smtp_conn,"RCPT TO:<" . $to . "> 等行的最新版本的 phpmailer 中,如何做到这一点?
最接近它,我可以看到是唯一提到 RCPT TO 的地方。
public function recipient($toaddr)
{
return $this->sendCommand(
'RCPT TO',
'RCPT TO:<' . $toaddr . '>',
array(250, 251)
);
}
我发现了在 PHPMAiler 上设置 DSN 的官方命令:
$mail->dsn = '成功,失败,延迟';
有可能按时使用这三个命令,或者隔离。
前任:
$mail = new PHPMailer(true);
$mail->dsn = 'SUCCESS';
服务器上默认启用 SUCCESS 和 FAILURE 命令,但 SUCCESS 是启用返回“交付状态通知”(Notificação de Status de Entrega)的必要条件。
注意:验证“PHPMailer.php”的第 343 行以获得更多说明。