Переслать электронные письма с сохранением получателей (INDY и Delphi) - PullRequest
0 голосов
/ 25 января 2020

Я получаю электронные письма из учетной записи GMail с помощью объекта TIdIMAP4 и хочу переслать их с помощью TIdSMTP на другую (GMail-) учетную запись, сохранив при этом исходный список получателей.

Мой подход заключался в добавлении адресата адрес как B CC, чтобы сделать его невидимым в месте назначения, но как я могу предотвратить отправку SMTP-компонента всем остальным получателям в списке? Затем они получат все переадресованные письма дважды.

ОБНОВЛЕНИЕ 1: вместо использования B CC я указал адрес назначения в операторе отправки

smtp.Send(msg,destination);

, но сообщение по-прежнему отправляется всем остальным получателям.

1 Ответ

1 голос
/ 26 января 2020

По умолчанию TIdSMTP.Send() будет отправлять электронную почту всем получателям, перечисленным в свойствах Recipients, CcList и BccList TIdMessage.

Когда вы загружаете письмо в TIdMessage через POP3 или IMAP, Recipients и CcList (но не BccList) заполняются из существующих заголовков To и CC письма, соответственно.

Когда вы затем пересылаете электронное письмо, если вы не хотите, чтобы оно было отправлено получателям, указанным в электронном письме, вы можете вызвать перегруженную версию TIdSMTP.Send(), которая принимает список получателей в качестве параметра. Это отправит письмо ТОЛЬКО в этот список. Например:

var
  forwardTo: TIdEmailAddressList;
begin
  ...
  forwardTo := TIdEmailAddressList.Create;
  try
    // add desired recipients to forwardTo as needed, then...
    smtp.Send(msg, forwardTo);
  finally
    forwardTo.Free;
  end;
  ...
end;
...