У меня возникают трудности с отправкой зашифрованных HTML-писем с цитатой для печати. Мой HTML-код необходимо разрезать на строки, чтобы выполнить требование не содержать строки длиной более 79 символов, что требуется по соображениям совместимости — для этого варианта использования я нашел концепцию «разрыва мягкой строки».
Рабочий пример этого:
( mailto:[email protected]?subject=3DReply%20to%20this%20Post%20%5B428=
2-8596-332127136989972_339826386220047-6307b30ea80af240f0557f2340d9758d%5D&=
body=3D******%20Enter%20your%20reply%20below%20this%20line%20and%20hit%20SE=
ND.%20You%20may%20also%20attach%20an%20image%20to%20your%20reply%20****** )
Когда я копирую конец строки в блокнот, он показывает только = CR LF.
Итак, я пытался использовать wordwrap($newHtmlBody, 70, '='.PHP_EOL, true);
и мой вывод вроде как рабочий пример выше. Однако при просмотре отправленного электронного письма в gmail он не примет это. Что я делаю неправильно?
Соответствующий заголовок / тело письма над содержимым HTML:
MIME-Version: 1.0
From: "Admin" <[email protected]>
Content-Type: multipart/alternative; boundary="_av-aRPROueRxMYL7a0Ro00ndA"Message-Id: <[email protected]>
Date: Mon, 2 Mar 2015 15:41:38 +0100 (CET)
--_av-aRPROueRxMYL7a0Ro00ndA
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Plain text
--_av-aRPROueRxMYL7a0Ro00ndA
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Короткий ответ:
Использовать <pre>
тег, чтобы принудительно отображать разрывы строк в HTML.
Более длинный ответ:
То, что вы предлагаете (используя функцию wordwrap), разбивает тело отправляющего сообщения на управляемые куски, но не влияет на способ его отображения в клиенте. В HTML пробелы, включая «разрывы строк», табуляции и несколько пробелов, преобразуются в один пробел. Это означает, что ваши «мягкие разрывы строк» не имеют смысла при просмотре вашего HTML в веб-браузере. Выход будет непрерывно течь, пока не получит <br>
или другой тег, чтобы нарушить содержание.
Если у вас есть некоторые ограничения на отправку почты, которые устанавливают ограничение в 79 символов, то того, что вы сделали, может быть достаточно, даже если в клиенте отображается более 79 символов. (Обычно ограничение «79 символов» относится к текстовой части электронного письма, а не к HTML-части, поэтому проверьте, откуда это ограничение.)
Если он должен отображаться в 79 символах, то с помощью <pre>
тег в HTML скажет, что он не должен свернуть пробел, поэтому ваши разрывы должны показывать, где вы их просите.
%20
является разрыв мягкой линии. Вам не нужно делать ничего особенного. Если вы наберете такую длинную строку, Gmail прервет ее для вас:
echo '<a href="mailto:[email protected]?subject=Reply%20to%20this%20Post&
body=Enter%20your%20reply%20below%20this%20line%20and%20hit%20SEND.%20You%20may%20also%20attach%20an%20image%20to%20your%20reply!%20Repeat:%20Enter%20your%20reply%20below%20this%20line%20and%20hit%20SEND.%20You%20may%20also%20attach%20an%20image%20to%20your%20reply!">click me</a>';
Установите «Content-Transfer-Encoding» на «7bit» вместо «Quoted-Printable». Некоторые почтовые клиенты, такие как Outlook и Thunderbird, по-видимому, вставляют двойные межстрочные интервалы в каждой строке. Причина в том, что для «содержимого-передачи-кодирования» в MIME установлено значение «quoted-printable», которое добавляет разрывы строки перевода строки (CRLF) к исходному содержимому электронной почты, которые представляют собой символы, интерпретируемые этими почтовыми клиентами.