【问题标题】:Mark a mailitem as sent (VBA outlook)将邮件标记为已发送(VBA Outlook)
【发布时间】:2016-11-03 10:11:52
【问题描述】:

我在更改邮件的已发送属性时遇到问题,因为该属性是只读的,我需要从 vba 级别更改它。

从共享邮箱发送邮件后出现问题(使用在线Outlook模式)。邮件不会进入共享邮箱中的“已发送邮件”文件夹,而是留在发件箱文件夹中。我已经制作了宏来将邮件移动到正确的文件夹,一切都很好,但邮件的状态为未发送(当您打开邮件项时,您处于编辑模式)。我找不到问题的任何解决方案。

这是包含正确发送的邮件和从共享邮箱发送的邮件的发件箱文件夹:

【问题讨论】:

  • 你能验证一下,邮件真的发送了吗?
  • 是的,从共享邮箱发送的每封电子邮件都已送达。
  • 看来this 描述了您的问题。显然没有可能用 vba 实现你的目标
  • 好的,当我按下“发送/接收”按钮时,邮件会改变状态,所以这很有帮助;)请记住,我正在写关于 Outlook 在线模式(不是交换模式)的问题。正如我之前所说,邮件已送达但不知何故在发件箱文件夹中保持未发送状态。

标签: vba email outlook


【解决方案1】:

在低(扩展 MAPI)级别,发送/未发送状态(PR_MESSAGE_FLAGS 属性中的MSGFLAG_UNSENT 位)只能在第一次保存项目之前更改。

当然,Outlook 对象模型受到同样的限制,在发送状态下创建项目的唯一方法是创建一个PostItem 对象 - 它是在发送状态下创建的。然后,您需要将消息类改回 IPM.Note 并删除与图标相关的属性以确保项目看起来正确。

Redemption 允许您更改项目的状态(RDOMail.Sent 在第一次调用 Save 之前是读/写的)。

回到你的具体问题,你需要弄清楚为什么项目在未发送状态下留在文件夹中,而不是试图“修复”它。

【讨论】:

  • 通常问题是全球性的,甚至 microsft 也写过它(我现在找不到)所以这就是我尝试修复它的原因。明天我会尝试用你的方法来做:)
  • 好的,我创建了 postitem 对象,当我试图将内容从“损坏的”mailitem 复制到 postitem 时,我做不到。根据该站点:link 我应该可以更改诸如发件人之类的属性,但是在调试期间在 Outlook vba 中我弹出“对象不支持此属性或方法”也许还有其他更简单的方法可以做到这一点?我也有更改图标的问题...
  • 您将无法单独使用 Outlook 对象模型创建已发送的项目并将其内容填充到另一封邮件的内容中,除非您定期复制一个属性。
【解决方案2】:

我用不太整齐的方式解决了这个问题。我将注册表项 DelegateSentItemsStyle 更改为 0,当我这样做时,发送的邮件进入了我个人的已发送邮件文件夹。然后我只是将邮件移动到共享邮箱。

【讨论】:

    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 2019-07-19
    • 2013-02-02
    • 2013-05-27
    • 2020-06-08
    • 1970-01-01
    • 2015-05-20
    • 2015-07-30
    相关资源
    最近更新 更多