Is there a way to preserve a signature in RDOMail.Reply like MailItem.Reply does?

0

I tried obtaining the reply to the mail by using RDOMail.Reply method. However, after inspecting the returned object, I've noticed that the signature is not part of the HTMLBody property, as it is when using method MailItem.Reply (which I'm not using because it throws 0x80004004 (E_ABORT) exception). Also, attachments that would be needed for the signature if it contains images are not preserved as they are with MailItem.Reply. I've tried applying the signature separately, using Signature object. This adds signature to the HTMLBody, but doesn't use the _MailAutoSig attribute to mark the signature part therefore if I select "Change signature" from Outlook Ribbon, signature doesn't get replaced because Outlook has no way of knowing it is a signature.

Is there a way to obtain reply from RDOMail that would contain signature Outlook knows how to replace?

    var rdoMail = session.GetMessageFromID(entryid);
    var reply = rdoMail.Reply();
    reply.HTMLBody = "";
    var Account = session.Accounts.GetOrder(rdoAccountCategory.acMail).Item(1);
    var signature = Account.ReplySignature;
    signature.ApplyTo(reply, false);
    reply.Save();
outlook-redemption
asked on Stack Overflow Apr 11, 2021 by toni

1 Answer

0

This is a known issue/case when dealing with Extended MAPI code and it is not related to Redemption only. See Messages that are created outside Outlook do not include the default Outlook email signature for more information.

Your choices are:

  1. Mimic the Outlook behavior by adding all the necessary parts like _MailAutoSig attribute to the message body.
  2. Use the Outlook object model with the Reply method and then getting the Redemption equivalent by using the GetRDOObjectFromOutlookObject method. But as far as I can tell, looking at the exception you get, it is not possible because the code is used from a secondary thread, right?
  3. You can use its RDOAccount object (accessible in any language, including VBA). New message signature name is stored in the 0x0016001F property, reply signature is in 0x0017001F. You can also use the RDOAccount.ReplySignature and NewSignature properties.
    Redemption also exposes RDOSignature.ApplyTo method that takes a pointer to the RDOMail object and inserts the signature at the specified location correctly merging the images and the styles:
    set Session = CreateObject("Redemption.RDOSession")
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT
    set Drafts = Session.GetDefaultFolder(olFolderDrafts)
    set   Msg = Drafts.Items.Add
    Msg.To =   "user@domain.demo"
    Msg.Subject  = "testing signatures"
    Msg.HTMLBody = "<html><body>some <b>bold</b> message text</body></html>"
    set Account = Session.Accounts.GetOrder(2).Item(1)   'first mail account
    if  Not (Account  Is  Nothing)  Then
         set Signature = Account.NewMessageSignature
         if  Not (Signature  Is  Nothing)  Then
           Signature.ApplyTo Msg,  false   'apply at the bottom
         End If
    End If
    Msg.Send
answered on Stack Overflow Apr 11, 2021 by Eugene Astafiev

User contributions licensed under CC BY-SA 3.0