2015-03-02 8 views
2

У меня возникли трудности с отправкой закодированных HTML-сообщений с кавычками. Мой HTML должен быть разрезан на линии, чтобы удовлетворить потребность в отсутствии строки более 79 символов, требуемой для соображений совместимости. Я нашел концепцию «мягкого разрыва строки» для этой утилиты.Как использовать мягкие разрывы строк с html-письмами, чтобы иметь максимум 75 символов в строке?

Рабочий пример этого:

(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 
+0

Почему вы помещаете знак равенства перед разрывом строки? –

+0

Потому что это позволяет разделить html на строки, даже если они ломаются внутри атрибутов или других мест, которые могли бы вызвать проблемы. Это называется «мягким» разрывом строки. –

+0

О, я думаю, вы узнаете что-то новое каждый день! –

ответ

0

%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>';

+0

Для меня% 20 представляет кодируемый SPACE символ. Это не имеет никакого отношения к мягкому прерыванию строки, как указано в RFC (пункт 5): http://www.faqs.org/rfcs/rfc2045.html –

+0

Вы правы в RFC. Я думаю, что ответ таков: ссылка mailto на веб-странице не является электронной почтой. RFC к нему не относится. Почтовый клиент пользователя несет ответственность за вставку мягких перерывов. Gmail, например, обрабатывает это. Так что автору html вообще не нужно об этом думать. Мое решение работает, но не по той причине, о которой я говорил раньше. – malcanso

1

Короткий ответ:

Используйте <pre> тег для обеспечения разрывы строк, которые будут показаны в виде разрывов строк в HTML.

Longer Ответ:

Что вы предлагаете (используя функцию WordWrap) расщепляется представляемое тело сообщения на управляемые куски, но не будет влиять на то, как он отображается в клиенте. В HTML пробелы, включая «разрывы строк», вкладки и несколько пробелов, преобразуются в одно пространство. Это означает, что ваш «мягкий разрыв строки» не имеет смысла при просмотре HTML в веб-браузере. Выход будет непрерывно поступать до тех пор, пока он не получит <br> или другой тег, чтобы сломать контент.

Если у вас есть ограничения на отправку почты, которые налагают ограничение на 79 символов, то то, что вы сделали, может быть достаточным, даже если оно показывает более 79 символов на клиенте. (Обычно ограничение «79 символов» относится к части текста с обычным текстом, а не к части HTML), поэтому проверьте, откуда взялось это ограничение.)

Если вы должны иметь его в 79 символах, то с помощью <pre> тег в HTML скажет, что это не приведет к краху пробела, поэтому ваши перерывы должны показать, где вы их просите.

-1

Установите «Content-Transfer-Encoding» на «7bit» вместо «Quoted-Printable». Некоторые почтовые клиенты, такие как Outlook и Thunderbird, как представляется, вставляют разрывы между двумя интервалами в каждой строке. Причина в том, что «кодирование передачи контента» в MIME имеет значение «quoted-printable», которое добавляет линии линии возврата каретки (CRLF) к исходному содержимому электронной почты, которые являются символами, которые интерпретируются этими почтовыми клиентами.