【问题标题】:Reprocessing Outlook Undelivered Mail重新处理 Outlook 未送达的邮件
【发布时间】:2023-01-08 05:58:01
【问题描述】:

我有一个 Exchange 邮箱,里面有一堆 Outlook ReportItem 未送达的邮件。我试图通过对 ReportItem 消息调用“SendAgain”操作,通过 Outlook VBA 脚本重新处理未送达的消息。我的问题是 ReportItem 没有发送方法,所以我无法实际发送重新处理的消息。我正在使用以下代码来浏览消息:

Dim objApp As Outlook.Application
Dim objNameSpace As NameSpace
Dim journalAlertInbox As Folder

Dim objInspector As Inspector
Dim resendItem As ReportItem

Set objApp = CreateObject("Outlook.Application")
Set objNameSpace = objApp.GetNamespace("MAPI")
Set journalAlertInbox = objNameSpace.Stores.Item("thestore").GetDefaultFolder(olFolderInbox)

For Each folderItem In journalAlertInbox.Items
    If TypeOf folderItem Is ReportItem Then
        folderItem.Display
        Set objInspector = folderItem.GetInspector
        objInspector.CommandBars.ExecuteMso "SendAgain"
    
        Set resendItem = Application.ActiveInspector.CurrentItem
        Set objInspector = resendItem.GetInspector
        ''how do I send the item that is now displayed?
        ''resendItem.Close olSave
        folderItem.Close olDiscard
    End If
Next folderItem

我想我可以将显示的消息保存为草稿,但是如果我取消注释 resendItem.close olSave 行,这会导致在我的 Outlook 草稿文件夹中出现ReportItem 类型的消息。我可以在 Outlook GUI 中打开保存的草稿消息并单击发送按钮,但我看不到以编程方式实际调用发送操作的方法。检查草稿中的消息表明它是 ReportItem 类型,它没有 .Send 方法。

如何调用报告项上的“发送”操作?我可以清楚地看到“发送”按钮,但似乎没有实际点击它的编程方式。

【问题讨论】:

    标签: vba outlook mailitem


    【解决方案1】:

    OOM 确实公开了允许将 ReportItem 对象链接到原始 MailItem 的任何功能。您可以做的最好的事情是使用ReportItem.PropertyAccess.GetProperty 检索PR_ORIGINAL_SEARCH_KEY MAPI 属性(或PR_REPORT_TAG,其中包括搜索键和存储/已发送邮件文件夹条目 ID)并尝试在已发送邮件中找到匹配的邮件文件夹。你可以在OutlookSpy(我是它的作者)中看到这些属性。
    请记住,OOM 不允许搜索 Items.Find/Restrict 中的二进制 (PT_BINARY) 属性。

    如果使用 Redemption 是一个选项(我也是它的作者),它会公开 RDOReportItem.FindOriginalItem 方法。

    拥有原始项目后,您可以制作副本并尝试再次发送。

    【讨论】:

      猜你喜欢
      • 2022-12-18
      • 2010-09-12
      • 2011-10-30
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      相关资源
      最近更新 更多