2014-01-21 1 views
0

Я использую Lotus Notes NotesMIMEEntity для анализа и преобразования электронных писем. NotesMIMEEntity имеет свойство «Кодирование», которое должно дать мне кодировку текущего сообщения. Обычно это работает хорошо, но для некоторого сообщения я получаю (действительный) результат «none» или 1725.Content-Transfer-Encoding: none - как декодировать контент?

Есть ли кодировка по умолчанию, которую я могу использовать для декодирования таких сообщений, например, для кавычек? Как определить, в каком формате находится сообщение.

Я пробовал релевантные RFC, но не смог получить четкую информацию. Another question here делает эвристический подход, действительно ли это необходимо?

Справка действительно оценена.

ответ

0

Если он возвращается с ENC_NONE (1725), которые позволяют предположить, что отправка программное обеспечение опустили Content-Transfer-Encoding заголовок, или каким-то образом прикрутили его, что сделало его нечитаемым.

Учитывая, что вы либо должны предположить, что оно вообще не закодировано, либо вы должны предположить, что отправляющая сторона действительно могла бы закодировать его, но забыла установить заголовок. В последнем случае вы можете попытаться угадать, что это такое - например, эвристический подход. Действительно ли этот сценарий для сообщений, с которыми вы имеете дело? Я не могу ответить на это. Я также не могу ответить, действительно ли вам необходимо знать кодировку. Это зависит от ваших требований и того, что вы пытаетесь сделать с данными. (Например, если требование заключается в том, что ваш пользователь Lotus Notes должен точно видеть, как кто-то, кто не использовал Lotus Notes, видел сообщение, проблема в том, что то, что кто-то другой видел, будет зависеть от того, какие предположения использовалось для их использования! Вы не можете это знать!)

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

BTW: помните, что 7 бит, 8 бит и двоичный все означают, что данные не закодированы. Разница между ними - всего лишь «намек» на принимающую систему, что, если данные повторно передаются с помощью другого метода, возможно, потребуется кодирование. Во всех этих случаях, однако, правильное отношение к данным заключается в том, чтобы скопировать его без применения какого-либо преобразования (если, конечно, вы не получите 8-битные данные, но вы работаете в 7-битной среде).

+0

Спасибо, Ричард, за ваш ответ. Да, мне нужно получить декодированное содержимое сообщения, чтобы перенести его в другую систему, отличную от Notes. И да, я уже получил сообщения без какой-либо кодировки, но контент был указан для печати. Кажется, я должен пойти с эвристическим подходом. –

+0

Как видно из ответа @ Yosi, спецификация объясняет, что '7bit' является значением по умолчанию uf, а кодировка не указана. – tripleee

0

Для обычного SMTP 7 бит будет использоваться по умолчанию для кодирования содержимого. В частности, для кодирования кавычко печати на 8bit, вы можете использовать эту PHP функцию:

string quoted_printable_decode (string $str)