2013-09-26 2 views
0

Я использую TIdMessage и когда я назначаю пустой объект, например. IdMsg->Subject = ""; исходящий сообщение нет "Subject:" заголовок.TIdMessage обязательное поле темы

Если я добавляю тему, имея пробел, например. IdMsg->Subject = " ";, тогда сообщение имеет тему: заголовок, хотя он обрезает пространство - выход не является: "Subject:[sp][sp][cr][lf]", но это "Subject:[cr][lf]". Это явно не согласуется с остальными заголовками, все из которых имеют пробел после двоеточия и перед фактическими данными, поэтому пустой объект должен быть "Subject:[sp][sp][cr][lf]".

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

Есть ли способ заставить иметь заголовок Subject с 2 пробелами позади него (без редактирования исходного кода TIdMessage)?

Для тех, кто задается вопросом о причине - я хочу убедиться, что тупые программы чтения/сценарии чтения электронной почты правильно интерпретируются как «пустой объект», что является причиной всего этого, а не как что-то другое и удаляет тему: заголовок не в любом случае, оптимизация.

ответ

2

Вашего космический характер фактически выживает процесс кодирования, когда TIdMessageClient генерируют данные заголовка посылает, но пространство становится обрезанными TIdHeaderList, когда он разбором данных конечных заголовков и складывания длинных заголовков, чтобы соответствовать в пределах ограничений длины электронной линии , Каждая строка, сгенерированная для данного заголовка с помощью процесса сгибания, получает правильную обрезку, и поскольку ваши данные заголовка состоят только из пробелов, они отбрасываются.

Единственный способ отключить это свертывание - установить значение TIdMessage.LastGeneratedHeaders.FoldLines на False, что нецелесообразно, если вы не знаете, что ваши заголовки всегда будут достаточно короткими, чтобы никогда не требовалось свертывание.

Другой вариант - установить TIdMessage.Subject на пустую строку, а затем использовать свойство TIdMessage.ExtraHeaders. Вы должны будете использовать ExtraHeaders.Add() вместо ExtraHeaders.Values так, что строка добавляется как есть и избежать складывания:

Msg.ExtraHeaders.Add('Subject: '); 
+0

Есть ли тогда желательно способ? Добавление пользовательских заголовков? Надеюсь, вы не исправите это как ошибку сейчас, потому что мне нужно, чтобы объект был включен как пустой ... – Coder12345

+0

Я обновил свой ответ. –

Смежные вопросы