@miniven

Почему не отправляется письмо через PHPMailer?

Вот так выглядит функция отправки письма:

function send_message($array) {
    global $alias;
    global $settings;

    $message = "
		<p>" . $settings["mail"]["message"] . "</p>
        <br>
        <p><strong>Дата обращения: </strong>" . date('d.m.Y H:i:s') .  "</p>
	";
    foreach($array as $field) {
        $name = $field["name"];
        $value = $field["value"];

        if ($name !== "g-recaptcha-response" && $name !== "agreement") {
            $message .= "<p><strong>" . $alias[$name] . ":</strong> " . $value . "</p>";
        }
    };
    $message .= "<br><br><p>Это письмо сгенерировано автоматически. Пожалуйста, не отвечайте на него.</p>";

    $mail = new PHPMailer;

    $mail->isSMTP();
    $mail->Host = 'smtp.yandex.ru';
    $mail->SMTPAuth = true;
    $mail->Username = $settings["mail"]["auth"]["username"];
    $mail->Password = $settings["mail"]["auth"]["password"];
    $mail->SMTPSecure = "ssl";
    $mail->Port = 465;
    $mail->CharSet = "UTF-8";

    $mail->Subject = $settings["mail"]["subject"];
    $mail->SetFrom($settings["mail"]["sender"]["address"], $settings["mail"]["sender"]["alias"]);
    $mail->MsgHTML($message);
    $mail->AddAddress($settings["mail"]["receiver"]["address"], $settings["mail"]["receiver"]["alias"]);

    $mail->Send();
};


Все данные попадают верные. Этот код работает на локальном сервере и отлично отправляет письма. А на самом сайте работать не хочет. Происходит вот что: отрабатывает весь код до $mail->Send(); и на этом моменте начинается бесконечная отправка письма или что-то вроде того. В общем, ответ от сервера не приходит или приходит через несколько минут (успешный). Почему так происходит и что с этим делать?
  • Вопрос задан
  • 2291 просмотр
Пригласить эксперта
Ответы на вопрос 2
djQuery
@djQuery
"Кодируем помаленьку" ("Сказка о Тройке")))
Попробуйте mail_port = 587. Смените SMPT с яндексовского на какой-нибудь другой. Отключите у себя антивирус. Все эти шаги в разное время мне так или иначе помогали.
Кстати, сообщение об ошибке отправки получаете?

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}
Ответ написан
gubin_niko
@gubin_niko
Обратите внимание от какого ящика вы пытаетесь отправить почту.

Вангую, что:
$settings["mail"]["auth"]["username"] !== $settings["mail"]["sender"]["address"]

Давай попробуем так:
$mail->SetFrom($settings["mail"]["auth"]["username"], $settings["mail"]["sender"]["alias"]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы