Ответить на адрес в Indy 10?

Так как я обновил до Indy10, я заметил, что поле ReplyTo (Msg.ReplyTo[0].Address) на полученных TIdMessage(s), кажется, заполняется адресом из заголовка Return-path, если нет явного ответа на заголовок. Я ожидаю, что Msg.ReplyTo.Count должен быть равен нулю, если заголовка ответа нет. Что тут происходит? Это ошибка? Изменение дизайна? Что-то другое? Как я могу узнать, имеет ли сообщение отдельный адрес для ответа, или я должен отвечать на адрес из поля "от"? Получение ответа на обратный адрес, похоже, дает неверную версию моего собственного электронного письма, что не очень полезно.

Моя существующая логика (которая не работает для сообщений без адреса для ответа) выглядит следующим образом:

if Msg.ReplyTo.Count>0 then
  FReplyTo := Msg.ReplyTo[0].Address
else
  FReplyTo := Msg.From.Address;

1 ответ

Решение

При разборе электронной почты, TIdMessage.ReplyTo смотрит на Reply-To заголовок сначала, и если пустой / отсутствует, то смотрит на Return-Path заголовок. Если вы хотите знать, Reply-To само по себе пусто / отсутствует или нет, вам придется посмотреть на TIdMessage.Headers.Values['Reply-To'] вручную.

Думать об этом больше, и делать некоторые исследования о том, как Reply-To а также Return-Path на самом деле работает, наверное, имеет смысл убрать Return-Path от TIdMessage.ReplyTo собственности, поэтому я сделал это изменение сейчас.

Другие вопросы по тегам