【问题标题】:IMAPIProp::SaveChanges: MAPI_E_NO_ACCESS while trying to run operation on RDOMail ObjectIMAPIProp::SaveChanges: MAPI_E_NO_ACCESS 在尝试对 RDOMail 对象运行操作时
【发布时间】:2019-02-27 07:29:40
【问题描述】:

我正在尝试保存对 RDOMail 的一些更改,但出现以下异常 - Error in IMAPIProp::SaveChanges: MAPI_E_NO_ACCESS\r\nulVersion: 0\r\nComponent: Outlook Data File\r\nulLowLevelError: 0\r\nulContext: 805634561.

_rdoSession.MAPIOBJECT = app.Session.MAPIOBJECT;
RDOStore sto = _rdoSession.GetRDOObjectFromOutlookObject(_Account[0].DeliveryStore, Missing.Value);
RDOFolder folder = sto.GetDefaultFolder(rdoDefaultFolders.olFolderOutbox);
RDOItems Items = folder.Items;
for (int i = 1; i <= Items.Count; i++)
{
    try
    {
        RDOMail mail = Items.Item(i);
        if (mail != null)
        {
            mail.Account = (RDOAccount)POP3Account;
            int tag = mail.GetIDsFromNames("{00020386-0000-0000-C000-000000000046}", "X-Mailer");
            mail.Fields[tag] = _xmailerTag;
            mail.Save();
            mail.Send();
        }
    } catch {
    }
}

【问题讨论】:

  • 邮件和/或其父文件夹是如何打开的?
  • 我已经用代码更新了摘要

标签: c# outlook office365 ms-office outlook-redemption


【解决方案1】:

您不应该触摸发件箱文件夹中的邮件 - 从用户单击“发送”按钮的那一刻起,它们就归传输提供商所有。

如果您需要进行类似的修改,请在 Application.ItemSend 事件处理程序中进行 - 这是您在实际发送前触摸传出消息的最后机会。

【讨论】:

  • 有没有办法可以调试我使用 RDOMail 发送后发生的 smtp 通信?
  • 并非如此。首先,你甚至不知道它是否是 SMTP(它可以是 Exchange 等)。其次,消息提交是异步的。赎回只是将消息标记为“准备提交”,然后传输提供者将在稍后的某个时间接管它。
  • 我需要使用上面代码中提到的辅助帐户 POP3Account 发送发件箱中的电子邮件。但最近我开始出现带有消息的 System.InvalidCastException - 将 POP3Account 转换为 RDOAccount 时指定的转换无效。 POP3Account 是 RDOPOP3Account 类型
  • POP3Account 账户从何而来?你确定它真的是一个 POP3 帐户,而不是 IMAP4 / Exchange / 等?
  • 不过,您永远不应该触摸发件箱文件夹中的邮件。如果您需要在实际发送消息之前对其进行修改,请在 Application.ItemSend 事件处理程序中进行。
猜你喜欢
  • 2012-05-17
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 2019-02-08
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
相关资源
最近更新 更多