Письма не отправляются с PHPMailer 6 - PullRequest
0 голосов
/ 13 июня 2019

Я обновляюсь до phpmailer 6 и тестирую свои формы.

Если я использую следующий код, он не работает:

$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 () не отправляет электронное письмо?

1 Ответ

1 голос
/ 13 июня 2019

Вы не сказали, что вы подразумеваете под "не работает".Выдает ошибки, не отправляет вообще, или как?Было бы полезно увидеть протокол SMTP (установите SMTPDebug = 2).

Проблемы в стороне, это плохая идея:

$mail->setFrom($_POST['email'], $_POST['name'], false);

Это подделка, и ваши сообщения будутотклонено или отфильтровано по спаму, потому что это нарушит выравнивание DMARC.Установка $mail->Sender = 'example@mydomain.com'; немного поможет, так как ваш отправитель конверта будет в порядке, но, вообще говоря, не делайте этого, так как это не поможет с доставкой.

Единственное отличие, которое setFrom() имеет по сравнению с настройкой *Свойство 1011 * напрямую заключается в том, что оно немедленно проверяет адрес, и вы можете увидеть результат - попробуйте это:

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');
}
...