【问题标题】:A MailItem saved in the ItemSend Event is saved as draft保存在 ItemSend 事件中的 MailItem 保存为草稿
【发布时间】:2018-06-12 22:42:01
【问题描述】:

我正在开发一个 Outlook 插件,它允许用户在发送电子邮件后将其保存到文件系统。

为了实现这一点,我拦截了 Application.ItemSend 事件,并在我的处理程序中调用 MailItem.SaveAs(...)。它基本上可以工作。

我面临的问题是,当我打开保存的文件时,电子邮件处于草稿状态。我的意思是,可以修改收件人、主题和邮件正文,并且可以重新发送电子邮件。我希望电子邮件处于“已发送”状态,即不可修改。

看起来 Outlook API 在发送电子邮件后不提供任何调度的事件。只有之前,这是我的痛苦。

您有什么想法来执行此操作吗?

非常感谢您的帮助!

尼哥

【问题讨论】:

    标签: outlook vsto outlook-addin


    【解决方案1】:

    您可以将消息保存为已发送状态并填充发件人属性的最早时间是在“已发送邮件”文件夹上触发 Items.ItemAdd 事件时。

    【讨论】:

    • 嗨,德米特里,感谢您的提议;几天前我尝试过,发现它不可靠......使用这个解决方案,是否可以处理重定向规则?我的意思是,如果该项目被重定向到已发送项目文件夹之外的文件夹...谢谢!
    • Items.ItemAdd 非常可靠,除非您一次添加超过 16 封左右的电子邮件(与“已发送邮件”文件夹有关)。如果项目应该保存到不同的文件夹,您可以在 Application.ItemSend 事件中检查 MailItem.SaveSentMessageFolder 并在该文件夹上创建一个事件接收器,如果它不是默认的已发送项目文件夹 - 您可以使用 Dictionary (条目 id 与 Items 对象)来存储额外的 Items 对象以处理事件。
    • 谢谢德米特里;我在 SO 上的其他地方读到,在 MAPIFolder.Items 上保留参考至关重要,以避免事件断开连接。你实际上写了这个:)。我让客户测试了这个解决方案,它的表现非常好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多