通过兑换发送带有自定义属性的消息

发布于 2024-09-28 08:18:23 字数 1298 浏览 1 评论 0原文

我正在使用 Redemption.dll 通过 C# 中的 set_Filed() 和 get_field() 为我的消息设置自定义属性。一切都很顺利,直到我发送消息的那一刻。 在 Outlook 中,我使用 RDOMail.Send() 并将邮件发送到草稿文件夹。然后我在 Redemption FAQ 中读到我应该使用 IMessage::Submit() 方法(我在 .NET 的 dll 中找不到该方法),然后使用 DeliverNow(),我确实使用了该方法,但令我惊讶的是当我收到消息时,我丢失了我设置的属性。 这对于我们的项目来说确实非常重要,因为如果 Outlook 无法发送邮件,那么它就毫无价值。

这是我的代码的一部分。

 private void adxOutlookEvents_ItemSend(object sender, AddinExpress.MSO.ADXOlItemSendEventArgs e)
 {
     try
     {
         RDOSessionClass _RDOSession= MessagesActions.GetRDOSession();
         Outlook.MailItem _MailItem= e.Item as Outlook.MailItem;
         RDOMail _RdoMail = MessagesActions.GetRDOMail(_RDOSession, _MailItem);
         _RdoMail.Send();                // Send using Redeption
         e.Cancel = true;                // Only send using Redeption

         if (_RdoMail != null && Marshal.IsComObject(_RdoMail))
             Marshal.ReleaseComObject(_RdoMail);

         Redemption.MAPIUtils _MAPIUtils = new MAPIUtils();
         _MAPIUtils.DeliverNow(0, 0);
         if (_MAPIUtils != null && Marshal.IsComObject(_MAPIUtils))
             Marshal.ReleaseComObject(_MAPIUtils);

         CurrentInspector.Close(Outlook.OlInspectorClose.olDiscard);
     }
     catch
     {
     }
}     

谢谢。

I’m using Redemption.dll to set custom properties to my messages with set_Filed() and get_field() in C#. Everything works perfectly until the moment I send my messages.
From Outlook I use RDOMail.Send() and this sent the message to the Drafts folder. Then I read in the Redemption FAQ that I should use the IMessage::Submit() method (that I couldn’t find anywhere in the dll for .NET) and then use DeliverNow(), method that I did use but to my surprise when I receive my messages I lose the properties I had set.
This is really completely critical to our project since if Outlook can’t send mails it’s worth nothing.

Here is part of my code.

 private void adxOutlookEvents_ItemSend(object sender, AddinExpress.MSO.ADXOlItemSendEventArgs e)
 {
     try
     {
         RDOSessionClass _RDOSession= MessagesActions.GetRDOSession();
         Outlook.MailItem _MailItem= e.Item as Outlook.MailItem;
         RDOMail _RdoMail = MessagesActions.GetRDOMail(_RDOSession, _MailItem);
         _RdoMail.Send();                // Send using Redeption
         e.Cancel = true;                // Only send using Redeption

         if (_RdoMail != null && Marshal.IsComObject(_RdoMail))
             Marshal.ReleaseComObject(_RdoMail);

         Redemption.MAPIUtils _MAPIUtils = new MAPIUtils();
         _MAPIUtils.DeliverNow(0, 0);
         if (_MAPIUtils != null && Marshal.IsComObject(_MAPIUtils))
             Marshal.ReleaseComObject(_MAPIUtils);

         CurrentInspector.Close(Outlook.OlInspectorClose.olDiscard);
     }
     catch
     {
     }
}     

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

橘味果▽酱 2024-10-05 08:18:23

当邮件通过 SMTP 发送时(与同一域中的 2 个 Exchange 邮箱之间不同),该邮件将转换为 MIME,并且所有 MAPI 特定属性都会丢失。

如果您使用名为 UseTnef 的特殊命名属性,则可以强制 Outlook 以 TNEF(臭名昭著的 winmail.dat)格式发送邮件:

RDOMail.Fields["http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8582000B"] = true;

When a message is sent through SMTP (unlike between 2 Exchange mailboxes in the same domain), the message is converted to MIME, and all MAPI specific properties are lost.

You can force Outlook to send the message in the TNEF (the infamous winmail.dat) format if yo uset a special named property called UseTnef:

RDOMail.Fields["http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8582000B"] = true;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文