【问题标题】:Outlook add-in failed to read attachment pathOutlook 加载项无法读取附件路径
【发布时间】:2015-06-30 01:00:59
【问题描述】:

我试图在从 Outlook 发送邮件之前获取附件路径。但是,当我尝试这样做时,结果null。这是我的代码:

public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
    }

    void Application_ItemSend(object Item, ref bool Cancel)
    {

        Outlook.MailItem mail = Item as Outlook.MailItem;

        var atts = mail.Attachments;

        foreach (Outlook.Attachment attachment in atts)
        {
            MessageBox.Show(attachment.PathName); // the PathName is null !
        }
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {

    }
}

用户创建一个新邮件并添加已经在硬盘上的附件。如何获取所选文件的路径信息?

【问题讨论】:

    标签: c# path vsto attachment outlook-addin


    【解决方案1】:

    该信息不存储在 Outlook 中。在低级别(扩展 MAPI)上,附件甚至不必来自文件。想象一下从另一条 Outlook 邮件中拖出一个文件 - 根本没有物理文件。

    为什么路径很重要?

    【讨论】:

    • 在发送电子邮件之前,我想将实际文件上传到 FTP 并用链接替换它。我做到了,但是我必须再次(临时)保存附件才能上传它们。我只是想知道是否可以直接上传附件而不进行任何保存...
    • 不,你不能那样做。即使用户拖动了一个文件,在发送消息时它也可能已经消失了。在 MAPI 中,您可以直接访问 PR_ATTACH_DATA 属性(以 IStream 形式打开),但与通过网络发送数据相比,保存文件 (Attachment.SaveAsFile) 的性能损失可以忽略不计。
    【解决方案2】:

    Attachment 类的PathName 属性返回一个字符串,表示链接附件的完整路径。 该属性仅对链接文件有效。查看Type 属性值。

    附件是原始文件的副本,即使原始文件被删除也可以访问。 IE。原始文件路径不与附件一起存储。

    【讨论】:

    • 感谢您解释路径名属性,但这并不能回答我的问题。这更像是一条评论。
    • 您可以考虑在附加文件时为附件对象添加自定义属性。
    • 附加时如何获取文件路径?你能提供一个你提到的财产的例子吗?
    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多