【问题标题】:Print original email when it is undelivered未送达时打印原始电子邮件
【发布时间】:2019-01-25 21:49:58
【问题描述】:

我在 Windows 10 上使用 MS Office 2016 桌面应用程序。

我没有发现任何成功的在线搜索并联系 MS Outlook 支持 发现除了 VBA 脚本之外没有简单的方法。

我们将带有附件的个人邮件发送给大量的人。 (这个我没问题。)

我希望在未成功发送电子邮件时(由于电子邮件地址不正确或其他原因),对原始电子邮件(不是无法投递的邮件通知)执行一些操作。

可能的操作是将邮件及其附件打印到其他电子邮件。

我想要这个,因为每天打印大约 1000 封电子邮件中的单个电子邮件很麻烦。

MS Outlook 规则不提供“电子邮件未送达时”或类似情况的条件。这可以用VBA脚本实现吗?

【问题讨论】:

    标签: vba email outlook


    【解决方案1】:

    理论上 - 是的。首先,您需要确保获得实际的 NDR,并且对象类型是 ReportItem。如果您通过 Exchange 发送,这应该不是问题,但是如果您通过 POP3/SMTP 帐户发送,或者如果 NDR 作为来自目标服务器而不是您自己的 Exchange 服务器的常规纯文本消息传递,那么所有的赌注都是关闭。

    各种报告属性存储在 NDR 项目的收件人表中。不幸的是,OOM​​ 中的 ReportItem 不会像 MailItem 那样公开 Recipients 集合。您可以从 Body 属性中获取 NDR 信息,但不幸的是 OOM 有一个错误(几年未修复)导致 ReportItem,Body 返回无意义的乱码文本。见Extract text string from undeliverable email body to excel

    在大多数情况下,您可以从 PR_TRANSPORT_MESSAGE_HEADERS 属性中提取原始邮件(在 NDR 中引起)的邮件 ID(查看带有 OutlookSpy 的 NDR - 单击 IMessage 按钮)。您可以使用ReportItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001F") 访问该属性。然后,您可以尝试提取In-Reply-To MIME 标头,并使用它在“已发送邮件”文件夹中搜索原始邮件,使用PR_INTERNET_MESSAGE_ID 属性(DASL 名称http://schemas.microsoft.com/mapi/proptag/0x1035001F)上的Items.Find。这里还有另一个问题 - Sent Items 文件夹中的项目可能没有该属性:它由 Exchange 自动设置,但缓存存储中的 Sent Items 文件夹中的项目可能没有它,因为很可能项目从不同步(这是由于 Outlook 的带宽优化技巧),因此您可能必须使用 MAPI_NO_CACHE 标志以在线模式打开文件夹,OOM 不允许您使用 - 它是扩展 MAPI(C++ 或Delphi)或救赎(任何语言)。示例见What is the VBA property for: Server folder contains x itmes?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      相关资源
      最近更新 更多