Отправка почты, но нет идентификатора сообщений
Вопрос
Я получаю интересные отзывы от почтового сервера моих клиентов при отправке почты с компонентом Tidmessage Indy-10 Скажу:
550 Отклонено: сообщение не содержит идентификатор сообщений
Я получаю это даже при использовании собственного демонстрационного приложения Indy
http://www.indyproject.org/demodownloads/indy_10_mailclient.zip
Что мне сделать, чтобы исправить это. Благодарность!
Решение
Tidmessage в Indy 10 намеренно опускает заголовок «Сообщения» при кодировании электронного письма в розетку или tstream. Вам придется использовать собственность tidmessage.extraheaders, например:
IdMessage1.MsgId := ...';
IdMessage.ExtraHeaders.Values['Message-Id'] := IdMessage1.MsgId;
РЕДАКТИРОВАТЬ:
Как продолжение этого - TIdMessage
теперь обновляется с логическими изменениями в том, как он обрабатывает заголовки «Сообщения» и «In-Reply-To»:
http://indyproject.org/sockets/blogs/changelog/20160912.aspx
А TIdMessage.MsgId
Свойство теперь генерирует заголовок «идентификатора сообщений» независимо от того, сохраняется ли электронное письмо, транслируется или передается. Поэтому вам не нужно использовать ExtraHeaders
собственность больше.
Другие советы
Это работает с Indy9, может быть, все не слишком много в 10:
procedure AddMsgID(AMsg: TIdMessage);
var
id: AnsiString;
begin
id := GenerateUniqueMsgID;
AMsg.MsgId := id;
AMsg.AddHeader('Message-ID=' + id);
// AMsg.ExtraHeaders.Values['Message-ID'] := id;
end; // AddMsgID