代码之家  ›  专栏  ›  技术社区  ›  gooopil

从现有MailItem对象复制嵌入图像

  •  1
  • gooopil  · 技术社区  · 6 年前

    我正在尝试从当前正在编辑的现有邮件中生成新邮件。用户键入其电子邮件的内容(以下代码中的currentMailItem),单击按钮,然后使用currentMailItem作为模板生成一组邮件。

    工作正常,除了嵌入图像:签名、使用插入命令插入的图像,它们不会显示在生成的邮件中(“链接图像无法显示…”)。所以我尝试获取这些图像,将它们重新连接到新的邮件项目并重新链接它们。

    我通过以下方式检索邮件:

    Outlook.MailItem currentMailItem = Application.ActiveInspector().CurrentItem;
    

    然后我在附件中循环(无论如何,我这样做是为了将实际附件复制到生成的邮件中)

    foreach (Attachment attachment in currentMailItem.Attachments)
    {
        var tempFile = "...";
        attachment.SaveAsFile(tempFile);
    }
    

    这时,一些奇怪的事情发生了,使用最简单的可能情况:一封包含一个短字符串的邮件和一个包含图像的签名。

    • 第一次启动该函数时,附件完全为空,没有签名图像的痕迹。

    • 如果我再次启动该函数,这一次只有一个附件,只有在我尝试保存附件时出现异常:

      系统运行时。InteropServices。COMException:“无法保存附件。无法添加附件;未提供数据源。”

    • 更奇怪的是,有一次,而且只有一次,尽管我运行了1000次这个代码,但我实际上还是保存了附件,正如预期的那样,这就是签名图像。

    在这一点上,我对任何指针都持开放态度。。。 谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   Eugene Astafiev    6 年前

    首先,我建议通过调用 Save 方法:

    Outlook.MailItem currentMailItem = Application.ActiveInspector().CurrentItem;
    currentMailItem.Save();
    Outlook.MailItem copy = currentMailItem.Copy();
    
    // do whatever you need with a copy
    

    然后,您可以尝试使用 MailItem.Copy 方法创建对象的另一个实例。注意 Copy 方法返回表示 MailItem 可以发送的对象。