Phpmailer, не могу установить необходимый адрес электронной почты - PullRequest
0 голосов
/ 30 октября 2019

Этот код работает, электронная почта отправляется

$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 является действующим рабочим адресом электронной почты, связанным с этим веб-сервером.

Спасибо.

1 Ответ

1 голос
/ 31 октября 2019

Это описано в руководстве по устранению неполадок 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';

Конфигурация DMARC в Yahoo не позволит вам подделать адрес отправителя, так что вы можетеиспользуйте только адрес отправителя, соответствующий вашему имени пользователя - это, вероятно, является причиной появления симптома, который вы видите.

...