Подготовить тело письма для PHPMailer

Я застрял в проблеме с использованием фреймворка 1С-Битрикс с PHPMailer. Проблема связана с телом письма.

Фреймворк 1С-Битрикс подготавливает тело в зависимости от включенных опций. Например, если я включу опцию «Создать текстовую версию html-email», тело будет выглядеть так:

    ---------alt8045b59706
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This is my email 

---------alt8045b59706
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<h1> This is my email </h1>

---------alt8045b59706--

Если к шаблону электронной почты будет прикреплен текстовый файл, тело будет выглядеть так:

---------mix4215b5973f
Content-Type: multipart/alternative; boundary = "-------alt3795b5973f"

---------alt3795b5973f
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This is my email 

---------alt3795b5973f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<h1> This is my email </h1> 

---------alt3795b5973f--
---------mix4215b5973f
Content-Type: text/plain; name = "=?UTF-8?B?dGVzdC50eHQ=? = "
Content-Transfer-Encoding: base64
Content-ID: <427605>

dGVzdCB0ZXh0Cg==

---------mix4215b5973f--

И, наконец, стандартное тело письма будет выглядеть так:

<h1> This is my email </h1> 

Я не могу просто передать такое тело письма PHPMailer. Не работает правильно. Пробовал msgHtml () - тоже не работает.

Но стандартная функция php mail () хорошо работает с таким телом письма. Я обнаружил, что в PHPMailer мне нужно установить Body и AltBody отдельно. Но тогда как мне лучше всего разобрать такое тело письма.

Может кто знает инструмент для этого?
Или в PHPMailer есть для этого встроенные методы?
Возможно, мне нужно просто вручную установить правильный заголовок Content-Type (фреймворк сообщает мне правильный Content-Type)

Заранее спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
253
1

Ответы 1

Вам не нужно думать об этом - PHPMailer сделает это за вас. Это все, что вам нужно сделать, чтобы создать такую ​​структуру:

$mail->isHTML();
$mail->Body = '<h1> This is my email </h1>';
$mail->AltBody = 'This is my email';
$mail->addAttachment('path/to/file.pdf');

Кроме того, структура MIME в примере, который вы привели для тела сообщения с вложением, неверна, поэтому я не ожидал, что она будет работать в любом контексте.

Дело в том, что у меня уже есть подготовленное тело (как я показал в примерах) к тому времени, когда я могу начать работать с PhpMailer. На данный момент я нашел временное решение, переопределив метод PHPMailer :: createBody (). Если у меня есть «граничная» подстрока в заголовке «Content-Type» (установленном моей структурой), я просто передаю тело письма (подготовленное моим фреймфорком) в $ this-> Body. Если нет «граничной» подстроки, я вызываю parent :: createBody (). Но, используя этот метод, я пропускаю некоторую инициализацию ($ this-> border, $ this-> MIMEHeader) и полностью пропускаю кодировку, которую имеет родительский метод. Так что лучший способ для меня - разобрать тело?

Alex Petrenko 30.07.2018 08:19

Лучше всего этого не делать. Вместо того, чтобы тратить силы на создание собственного сообщения, передайте тот же контент в PHPMailer и заставьте его построить тело для вас - вот для чего нужны библиотеки. Не похоже, что вы делаете что-то необычное в структуре, поэтому я рекомендую плыть по течению. Внутреннее устройство PHPMailer не слишком красивое, и вы обнаружите множество проблем, если переопределите важные вещи.

Synchro 30.07.2018 09:29

Другие вопросы по теме