Задать вопрос
@skyfly2010

Как исправить проблему с mail php и заголовками для gmail?

Добрый день. Я сделал небольшую функцию для отправки письма с прикрепленным аудиофайлом.
function sendHtmlEmailWithAttachment($to, $subject, $htmlContent, $attachmentPath) {

    $boundary = uniqid('boundary_');


    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
    $headers .= "To: $to\r\n";
    $headers .= "Subject: $subject\r\n";
	$headers .= 'From: bot@site.com' . "\r\n".'Reply-To: bot@site.com."\r\n".'X-Mailer: PHP/'.phpversion();


    $body = "--$boundary\r\n";
    $body .= "Content-Type: text/html; charset=UTF-8\r\n";
    $body .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $body .= chunk_split($htmlContent, 998) . "\r\n";

    $body .= "--$boundary\r\n";
    $body .= "Content-Type: audio/mpeg; name=\"" . basename($attachmentPath) . "\"\r\n";
    $body .= "Content-Transfer-Encoding: base64\r\n";
    $body .= "Content-Disposition: attachment; filename=\"" . basename($attachmentPath) . "\"\r\n\r\n";
    $body .= chunk_split(base64_encode(file_get_contents($attachmentPath))) . "\r\n";
    $body .= "--$boundary--";


    if (mail($to, $subject, $body, $headers)) {
        return true;
    } else {
        return false;
    }
}

Но столкнулся с проблемой, Yandex мои письма принимает и все отлично. Аудио Файл доставляется, текст письма тоже в полном порядке.
А вот с Gmail возникли некоторые сложности. Gmail письма отклоняет.
Насколько я понял, проблема в том, что письмо не соответствует стандарту RFC 5322: "SMTP error: 550-5.7.1 This message is not RFC 5322 compliant. There are multiple To headers."
Следовательно, проблема в том, что несколько заголовоков недопустимо спецификацией.

Проблему понял и осознал, но не понял, как ее исправить. У меня не хватает сообразительности, как сохранить функциональность скрипта и при этом уменьшить число заголовков.
  • Вопрос задан
  • 267 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
Vamp
@Vamp
Заголовки To и Subject подставляются автоматически функцией mail. Вам не нужно добавлять их самостоятельно. Просто удалите строки:

$headers .= "To: $to\r\n";
$headers .= "Subject: $subject\r\n";
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vapaamies
@Vapaamies
Психанул и снес свои ответы не отмечающим решения…
$body .= "Content-Type: text/html; charset=UTF-8\r\n";
$body .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$body .= chunk_split($htmlContent, 998) . "\r\n";

Меня вот это еще напрягает. Должно быть 8bit. Плюс, возможно, по строгому стандарту строка не должна превышать 76 символов.
Ответ написан
Ваш ответ на вопрос

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

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