带有Outlook的C#...将签名添加到RTFBody电子邮件而不是HTMLBody

时间:2018-12-17 21:58:48

标签: c# outlook signature

我有一封由C#使用Outlook Interop生成的电子邮件,但是我需要使用RTFBody,因为它是RTF格式的,而不是HTMLBody,在这里我可以看到所有在其中添加签名的示例。

我正在尝试做类似的事情,但这对我没有用。有什么建议可以使其在Outlook 2016中正常工作吗?

MyOutlook.Mailitem oMailItem =(MyOutlook.MailItem)oApp.CreateItem(MyOutlook.olItemType.olMailItem);
oMailItem.Display(oMailItem); //create the empty mail item
oMailItem.To = emailform.ToMain;
oMailItem.CC = ccStrings;
oMailItem.BCC = emailForm.BCC;
oMailItem.Subject = emailForm.Subject;
oMailItem.RTFBody = GetRTBText(); //function to get RTF byte array

private byte[] GetRTBText() {
   Clipboard.Clear();
   RTBBody.SelectAll();
   RTBBody.Copy();
   return Encoding.UTF8.GetBytes(Clipboard.GetText(TextDataFormat.Rtf));

}

更新:

因此,当我使用omail.RTFBody进行类似于oMail.HTMLBody的技巧并使其与内容结合在一起时,似乎可以显示签名。现在的问题是原始项目无法显示,因为它说您不能添加byte []。我要么需要为此实例覆盖+运算符,要么需要弄清楚如何向其中添加一个空字节arr ...

因此,我尝试将返回的字节数组与一个空字节数组连接在一起。引发内存不足异常。我试图将oMailItem.RTFBody电子邮件项本身连接起来,同样的问题...

不知道该怎么办...当我这样做时,即使它抛出错误,签名也会出现,只是电子邮件正文没有。

2 个答案:

答案 0 :(得分:0)

您可以将RTF正文读取到隐藏的RTF控件中,加载RTF签名文件数据,然后将其插入到RTF控件中-我使用过EM_EXSETSEL / EM_STREAMINSF_RTF | SFF_SELECTION)Windows API消息。然后,您可以流式传输生成的RTF。

答案 1 :(得分:0)

好的,我想出了一种解决方法,方法是显示电子邮件以显示签名,然后使用mailItem的HTMLBody,然后将其放入Web浏览器文档实例中,然后将其复制并粘贴到Rich Text中框,然后将RTFody中的富文本框文本编码为字节数组。

它可以在其中放置适当的信息,但没有适当的字体和颜色。如果还有另一种使用实际HTMLBody的方法,我想知道如何...