【问题标题】:Forward Emails preserving recipients (INDY and Delphi)转发电子邮件保留收件人(INDY 和 Delphi)
【发布时间】:2020-01-25 16:09:16
【问题描述】:

我使用 TIdIMAP4 对象从 GMail 帐户检索电子邮件,并希望使用 TIdSMTP 将它们转发到另一个 (GMail-) 帐户,同时保留原始收件人列表。

我的方法是将目标地址添加为密件抄送,使其在目标中不可见,但如何防止 SMTP 组件将其发送给列表中的所有其他收件人?然后他们将收到所有转发的邮件两次。

更新 1: 我没有使用密件抄送,而是在发送语句中提供了目标地址

smtp.Send(msg,destination);

但邮件仍会发送给所有其他收件人。

【问题讨论】:

  • 仅供参考,您的更新应该作为答案发布。见Can I answer my own question?
  • 将明确的收件人列表作为参数传递给Send() 只会将电子邮件发送到该列表,它不会将电子邮件发送给电子邮件本身中提到的收件人,如您所说。跨度>
  • 不幸的是(Delphi 10.3.3,Stock Indy)在我的设置中,尽管我使用上面的代码并创建了新的目的地,只填充了列表中所需的地址。
  • 对不起,你是对的我必须纠正自己 - 其他收件人没有收到邮件,由于某种奇怪的原因,发送的邮件在“中继”帐户的 Intray 中可见。谢谢。如果您将您的意见作为答案,我将很乐意接受!
  • 我已经发布了答案

标签: email delphi smtp indy


【解决方案1】:

默认情况下,TIdSMTP.Send() 会将电子邮件发送给TIdMessageRecipientsCcListBccList 属性中列出的所有收件人。

当您通过 POP3 或 IMAP 将电子邮件下载到 TIdMessage 时,RecipientsCcList(但不是 BccList)会从电子邮件的现有 ToCC 标头中填充,分别。

当您随后转发电子邮件时,如果您不希望将其发送给电子邮件中指定的收件人,则可以调用将收件人列表作为参数的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;

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 2012-04-08
    • 2020-05-07
    相关资源
    最近更新 更多