Задать вопрос
@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."
Следовательно, проблема в том, что несколько заголовоков недопустимо спецификацией.

Проблему понял и осознал, но не понял, как ее исправить. У меня не хватает сообразительности, как сохранить функциональность скрипта и при этом уменьшить число заголовков.
  • Вопрос задан
  • 266 просмотров
Подписаться 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 символов.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Lachestry Таганрог
от 170 000 до 200 000 ₽
SpectrumData Екатеринбург
от 150 000 до 220 000 ₽
14 дек. 2024, в 07:35
500 руб./за проект
14 дек. 2024, в 05:57
50000 руб./за проект
14 дек. 2024, в 02:49
500 руб./за проект