【问题标题】:Outlook MAPI - Cannot retrieve data from the property PR_RECIPIENT_TRACKSTATUS_DELIVERYOutlook MAPI - 无法从属性 PR_RECIPIENT_TRACKSTATUS_DELIVERY 检索数据
【发布时间】:2020-10-19 16:41:45
【问题描述】:

我想在发送电子邮件时访问每个收件人的 MAPI 属性 PR_RECIPIENT_TRACKSTATUS_DELIVERY。

在电子邮件发送事件中,使用以下代码会生成错误:对象不支持属性“http://schemas.microsoft.com/mapi/proptag/0x5FF5000A”。

private void MailItem_Send(object item, ref bool cancel)
{
   Outlook.MailItem mailItem = item as Outlook.MailItem;

   var recDelivery = "";
   foreach (Outlook.Recipient r in mailItem.Recipients)
   {
      try
      {
         recDelivery = r.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x5FF5000A"); //PR_RECIPIENT_TRACKSTATUS_DELIVERY - generates error
      }
      catch (Exception ex)
      {
         recDelivery = ex.Message;
      }
   }
}

是否可以在发送事件期间使用 Outlook 的 MAPI 对象模型访问此属性的数据?如果不是,在 Outlook 邮件项的状态中是否存在属性数据可用的特定点? 请注意,如果在尝试访问 MAPI 属性之前明确保存电子邮件 (Outlook.MailItem.Save()),则会出现相同的错误。

此外,如果将 PR_RECIPIENT_FLAGS 属性添加到上面的代码块中,我可以访问数据。例如

var recipientFlag = r.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x5FFD0003"); //PR_RECIPIENT_FLAGS

提前谢谢你。

【问题讨论】:

    标签: outlook-addin mapi


    【解决方案1】:

    该属性仅对约会响应才真正有意义。 您是否稍后会在 OutlookSpy 或 MFCMAPI 中看到该属性(例如,当邮件移动到已发送邮件文件夹时)?您可以在该文件夹上使用Items.ItemAdd 事件在消息发送后访问该属性。

    【讨论】:

    • 谢谢德米特里。我现在查看了 OutlookSpy (GetRecipientsTable)。我可以看到该属性包含 0 用于现有收件人和 MAPI_E_NOT_FOUND 用于新收件人。这就是我正在寻求的区别。为了给您一些背景信息,我试图在触发发送事件时识别添加到对话(回复)中的新收件人。使用 OutlookSpy 运行更多测试时,MAPI 属性似乎与现有收件人的报告 0 和新收件人的 MAPI_E_NOT_FOUND 一致。如果有更合适的方法可以从现有收件人中识别新收件人,欢迎提出建议。
    • 那么异常是预期的,你可以用它来区分新旧收件人。
    • 我遇到的问题是访问上面的属性总是会为现有和新的收件人返回错误。我也试过救赎。使用 RDORecipient.Fields["http://schemas.microsoft.com/mapi/proptag/0x5FF5000A"] 但我无法获得与 OutlookSpy 相同的结果。它为现有收件人和新收件人返回错误,与上面的代码行为相同。
    • 先尝试保存项目
    • 您好 Dimitry,非常感谢您的建议 - 谢谢。在访问 mapi 属性之前,我尝试手动保存电子邮件并调用 mailItem.Save,但没有成功。兑换返回“IMAPITable.SetColumns 中的错误:MAPI_E_INVALID_PARAMETER。”是否可以使用 RDORecipient.RawTable 或 RDORecipient.MAPITable 访问 PR_RECIPIENT_TRACKSTATUS_DELIVERY?当发送事件被触发时,您是否可以想到任何其他方法来识别添加到对话中的新收件人?
    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多