2015-03-24 1 views
0

В IdMessageClient.pas произошла ошибка, которая вызывает сбой во время чтения сообщений.Ошибка в IdMessageClient.pas в RAD XE7

Если кодировка сообщений «quoted-printable», то вложение не читается правильно и вызывается пустое исключение.

Пожалуйста, измените процедуру TIdMessageClient.ReceiveBody, строка 968 из:

if PosInStrArray(LContentTransferEncoding, ['7bit', '8bit', 'binary'], False) = -1 then begin {do not localize} 

в

if PosInStrArray(LContentTransferEncoding, ['7bit', 'quoted-printable', '8bit', 'binary'], False) = -1 then begin {do not localize} 

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

Проблема возникла в RAD XE7. В предыдущей версии все работало нормально.

ответ

0

Первое - эта конкретная строка кода никогда не появлялась в строке 968 от IdMessageClient.pas. В зависимости от того, какую версию SVN вы просматриваете в прошлом году, она появляется в строке 967, 970 или 946 вместо этого.

Во-вторых - версия SVN, поставляемая с XE7 (5177), не является последней версией, доступной в настоящее время (5269, на момент написания этой статьи). Убедитесь, что вы используете последнюю версию, так как ReceiveBody() уже получил несколько обновлений с момента выпуска XE7.

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

В-четвертых, даже тогда я не склонен добавить quoted-printable к этому конкретному заявлению if, так как он там не принадлежит. Что конкретно if заявление ищет действительныйContent-Transfer-Encoding значения для multipart/... типов, а quoted-printable категорически запрещен RFC 2045 Раздел 6.4 (и указан в комментариях выше этой строки кода). Если у вас есть электронное письмо с использованием незаконного Content-Transfer-Encoding, тогда письмо будет искажено, и мне не нравится, если Indy разоблачает откровенно искаженные данные, если это абсолютно необходимо. Мы уже сталкивались с неверными сообщениями, которые используют Content-Transfer-Encoding: quoted-printableбез фактически QP-кодирование основного текста, поэтому quoted-printable в этом сценарии игнорируется. Если ваш неудачный адрес электронной почты фактически (но нелегально) QP-кодирует основной текст multipart/..., вам может потребоваться отключить декодер Indy и самостоятельно декодировать его.