Search code examples
emaildelphismtpindy

Forward Emails preserving recipients (INDY and Delphi)


I retrieve eMails from a GMail account with a TIdIMAP4-object and want to forward them with TIdSMTP to an other (GMail-)account while preserving the original list of recipients.

My approach was adding the destination address as BCC to make it invisible in the destination, but how can I prevent the SMTP component from sending it to all the other recipients in the list? They then would get all the forwarded mails twice.

UPDATE 1: Instead of using BCC I provided the destination address in the send statement

smtp.Send(msg,destination);

but the message is still sent to all the other recipients.


Solution

  • By default, TIdSMTP.Send() will send the email to all of the recipients listed in the Recipients, CcList and BccList properties of TIdMessage.

    When you download an email into a TIdMessage via POP3 or IMAP, the Recipients and CcList (but not the BccList) are filled in from the email's existing To and CC headers, respectively.

    When you then forward the email, if you do not want it to be sent to the recipients specified in the email, then you can call the overloaded version of TIdSMTP.Send() that takes a recipient list as a parameter. That will send the email ONLY to that list. For example:

    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;