未使用PHPMailer 6发送电子邮件

未使用PHPMailer 6发送电子邮件,php,phpmailer,Php,Phpmailer,我正在升级到phpmailer6并测试我的表单 如果我使用以下代码,它将不起作用: $mail = new PHPMailer; $mail->ContentType = 'text/plain'; $mail->IsHTML(false); $mail->Sender = 'example@mydomain.com'; $mail->setFrom($_POST['email'], $_POST['name'], false); $mail->addReply

我正在升级到phpmailer6并测试我的表单

如果我使用以下代码,它将不起作用:

$mail = new PHPMailer;

$mail->ContentType = 'text/plain'; 
$mail->IsHTML(false);
$mail->Sender = 'example@mydomain.com';
$mail->setFrom($_POST['email'], $_POST['name'], false);
$mail->addReplyTo($_POST['email'], $_POST['name']);

$mail->addAddress($to);
我尝试过多种与setFrom的组合(例如,删除布尔标志,省略$mail->Sender部分,省略addReplyTo),但在使用setFrom()时,它永远不起作用

但是,如果我使用此代码,它似乎确实有效:

$mail = new PHPMailer;

$mail->ContentType = 'text/plain'; 
$mail->IsHTML(false);
$mail->From = $_POST['email'];
$mail->FromName = $_POST['name'];
$mail->addAddress($to);

知道setFrom()为什么不发送电子邮件吗?

您还没有说出“不工作”的意思。它会抛出错误,根本不发送,还是什么?查看SMTP成绩单(set
SMTPDebug=2
)会有所帮助

撇开问题不谈,这是个坏主意:

$mail->setFrom($_POST['email'], $_POST['name'], false);
这是伪造的,会导致您的邮件被拒绝或垃圾邮件过滤,因为这会破坏DMARC对齐。设置
$mail->Sender=>example@mydomain.com';
会有一些帮助,因为你的信封寄件人是可以的,但一般来说不要这样做,因为这对交付没有帮助

setFrom()
与直接设置
From
属性不同之处在于,它会立即验证地址,并且您可以看到结果-请尝试以下操作:

if (!$mail->setFrom($_POST['email'], $_POST['name'], false)) {
    die('bad address');
}
如果您给它一个错误的地址,那么发送将失败,而如果您直接设置了属性,则仍可能尝试发送-这可能解释您看到的差异

我建议您这样设置,即不要伪造发件人地址或信封寄件人,但仍要对提交的表格进行回复,请转到提交人:

setFrom('example@mydomain.com');
if (!$mail->addReplyTo($_POST['email'], $_POST['name'])) {
    die('bad address');
}

您如何确定电子邮件未发送且不被收件人阻止?未接收电子邮件并不构成电子邮件未发送的证据。您是否有任何例外情况?如果您使用SMTP发送,则还应添加
$mail->SMTPDebug=2