На самом деле, это не проблема «почтового сервера». Ограничение SMTP-строки определяет количество символов, допустимое для каждой строки во время передачи. SMTP RFC допускает до 1000 символов в строке, а установленный по умолчанию постфикс с установленным ограничением составляет 998 символов. Вам следует связаться с вашим хостинг-провайдером для увеличения лимита линии SMTP, если вы считаете, что необходимо превышать RFC.

узнать, есть ли какие-либо функции / классы / и т. Д., Чтобы помочь с ограничением в 990 символов для электронной почты, поскольку мой HTML выполняется из-за этого.

Проблема: (Источник)

Обратите внимание, что почтовые серверы имеют ограничение в 990 символов в каждой строке, содержащейся в сообщении электронной почты. Если отправлено сообщение электронной почты, которое содержит строки длиной более 990 символов, эти строки будут подразделены дополнительными символами конца строки, что может привести к повреждению в сообщении электронной почты, особенно для содержимого HTML. Чтобы этого не происходило, добавьте свои собственные символы конца строки в соответствующие места в сообщении электронной почты, чтобы ни одна строка не превышала 990 символов.

У кого-нибудь еще есть эта проблема? и как ты это исправил?

Похоже, мне нужно найти хорошее место, чтобы разбить мой HTML и вручную добавить разрыв строки, тьфу ...

ОБНОВИТЬ:

Это табличные данные со многими строками. Так что мне нужно добавить \ n или<br /> где-то?

ОБНОВЛЕНИЕ № 2: Добавление кода типа MIME

$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\r\n"; // added this, but still no results
$headers .= "From: [email protected]\r\n";

Вот как я вызываю функцию (и):

Как я изначально звонил:

return $html;

Что я пробовал:

return imap_8bit($html); // not working, nothing is captured in the error log

А ТАКЖЕ

return imap_binary($html); // not working, nothing is captured in the error log

ОБНОВЛЕНИЕ № 3 (Добавление функции почты)

try {
    mail(
        '[email protected]',
        'Subject of Email',
        $html,
        $headers
        );
    } catch (Exception $e) {
        echo ("ERROR: Email NOT sent, Exception: ".$e->getMessage());
    }

Пример HTML (Это сообщение электронной почты в формате HTML) (Это также относится к классу, который является частью службы XMLRPC)

private function getHTML() {
    $html  = '<html><head><title>Title</title></head><body>';
    $html .= '<table>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '</table>';
    $html .= '</body>';
    $html .= '</html>';

    return $html;
    //return imap_8bit($html); // not working, nothing is captured in the error log
    //return imap_binary($html); // not working, nothing is captured in the error log
    // Both of these return the XMLRPC Fault Exception: 651 Failed to parse response
}

Исключение ошибки: 651 Не удалось разобрать ответ, в основном не нравится формат или способ возврата данных.

 Alix Axel19 янв. 2011 г., 18:07
Вам не нужно беспокоиться о HTML, если вы правильно используете функции, которые я упомянул в моем ответе.
 Brad Christie19 янв. 2011 г., 17:58
Могу я спросить, что вы делаете в HTML, у которого не может быть перевода строки? ВыМожно разделить средний тег между атрибутами и не повлиять на разметку.
 Brad19 янв. 2011 г., 18:29
это не имеет никакого отношения к вашим разрывам HTML.<br/> здесь не имеет значения Решение заключается в кодировании base64, но если вы не хотите этого делать, просто\r\n Сделаю.
 Phill Pafford19 янв. 2011 г., 18:00
поэтому я предполагаю, что мой вопрос заключается в следующем: нужно ли вводить разрыв строки следующим образом: \ n или с HTML <br />? Также я хотел поддерживать валидацию HTML W3C настолько, насколько я могу

Ответы на вопрос(3)

Решение Вопроса

перенос слова() функция, так что вам не нужно вручную вставлять новые строки.

Рассматривали ли вы использовать одну из многих доступных почтовых библиотек?PHPMailer, PEAR Mail, SwiftMailer, и т.д...?

 jasonbar19 янв. 2011 г., 18:42
@Phill Pafford, если он не использует<pre> использование теговwordwrap() Обтекание текста не повлияет на отображение. Это то, что мы делаем в ESP, для которого я работаю, и то, как это делают почтовые библиотеки.
 SG119 февр. 2012 г., 18:55
Я думаю, что это правильный ответ. Я получал пробелы после 990 символов в электронных письмах, отправленных с помощью функции php mail (). Я добавил следующий код (после этого ответа), и моя проблема исчезла: почта ($ to, $ subject, wordwrap ($ message, 75, "\ n", true), wordwrap ($ headers, 75, "\ n" , правда))
 jasonbar19 янв. 2011 г., 19:32
@Phill Pafford, правильно,wordwrap($html) просто вставлю\nв строку каждые 75 символов (или меньше, в зависимости от разбивки слов). Это не будет разбивать слова.
 Phill Pafford19 янв. 2011 г., 19:00
Я думаю, что WordWrap () может на самом деле работать, проверяя его сейчас. Кстати, каково действие по умолчанию, если вы просто используете wordwrap ($ html); без пармов? Выглядит, чтобы разбить строку только пробелами (что я хотел бы и сейчас проверяю), просто хотел подтвердить
 Phill Pafford19 янв. 2011 г., 18:39
не добавит ли wordwrap () сами символы в просматриваемый HTML? Данные находятся в таблице с несколькими строками данных, я не уверен, что добавление новой строки или <br /> вызовет проблемы с отображением форматирования данных

\r\n.

Вы должны использоватьimap_8bit() а такжеimap_binary() функции для преобразования ваших данных в base64 илицитируемая для печати кодировка.

Вы также можете использовать существующую библиотеку, напримерSwiftMailer.

 Alix Axel19 янв. 2011 г., 18:21
@Phill: попробуйте добавить этот дополнительный заголовок:Content-Transfer-Encoding: quoted-printable.
 Phill Pafford19 янв. 2011 г., 18:19
Добавлен мой код MIME Type
 Alix Axel19 янв. 2011 г., 18:15
@Phill Pafford: Вы должны соответственно установить заголовки MIME, я не могу сказать вам, правильно ли это, не посмотрев на ваш код. Рассматривали ли вы использовать SwiftMailer или любую другую почтовую библиотеку, например PHPMailer?
 Phill Pafford19 янв. 2011 г., 18:25
обновил мой заголовок, чтобы добавить код (см. основной вопрос), все равно не повезло
 Phill Pafford19 янв. 2011 г., 18:13
Я запускаю это в сервисе XMLRPC и происходит сбой как imap_8bit (), так и imap_binary (). использование: return imap_8bit ($ html); вместо возврата $ html; (то же самое для imap_binary ()). Я использую это право? и SwiftMailer сейчас не вариант, так как для его установки на рабочем сервере потребуется пройти процедуру утверждения.

это не проблема «почтового сервера». Ограничение SMTP-строки определяет количество символов, допустимое для каждой строки во время передачи. SMTP RFC допускает до 1000 символов в строке, а установленный по умолчанию постфикс с установленным ограничением составляет 998 символов. Вам следует связаться с вашим хостинг-провайдером для увеличения лимита линии SMTP, если вы считаете, что необходимо превышать RFC.

Ваш ответ на вопрос