phpmailer,无法设置所需的“发件人”电子邮件

时间:2019-10-30 20:43:31

标签: phpmailer

此代码有效,已发送电子邮件

$mail = new PHPMailer();

$mail->setFrom("name1@gmail.com", "Name");

$mail->addAddress($to); //Recipient name is optional

//Address to which recipient will reply
$mail->addReplyTo("name1@yahoo.com", "Reply");

//Send HTML or Plain Text email
$mail->isHTML(true);

$mail->Subject = $subject;
$mail->Body = $body;

if(!$mail->send())
    {
         echo 'Mailer Error: ' . $mail->ErrorInfo . "\n";
    }

但是由于某些原因,如果我从电子邮件更改为name2@yahoo.com

    $mail->setFrom("name2@yahoo.com", "Name");

电子邮件不再发送。 Phpmailer不报告任何错误消息。

name2@yahoo.com是与此Web服务器相关的有效工作电子邮件地址。

谢谢。

1 个答案:

答案 0 :(得分:1)

《 PHPMailer故障排除指南》中对此进行了介绍。

现在大多数服务提供商都具有严格的SPF和DMARC配置(尤其是Yahoo,因为他们发明了DMARC),这意味着您无法通过其自己的邮件服务器或其他任何服务器从其域中的地址发送电子邮件。包括在他们的SPF记录中。

您的代码正在通过您自己的本地服务器(不是Yahoo服务器)发送,因此无法正常工作。

解决方案是使用您的电子邮件帐户的身份验证通过Yahoo自己的服务器进行发送,例如:

$mail->isSMTP();
$mail->Host = 'smtp.mail.yahoo.com';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->Username = 'me@yahoo.com';
$mail->Password = 'password';

Yahoo的DMARC配置不允许您欺骗发件人地址,因此您只能使用与用户名匹配的发件人地址-这可能是您所看到的症状的原因。