从电子邮件中获取附件

Posted

技术标签:

【中文标题】从电子邮件中获取附件【英文标题】:Get attachments from E-mail 【发布时间】:2020-11-06 23:30:35 【问题描述】:

我正在尝试从 MimeMessage 获取附件。

我做到了:

using (Stream ms = Utils.GenerateStreamFromString(mail.Rfc822Content))

    MimeMessage mimeMessage = MimeMessage.Load(ms);
    // collect our list of attachments
    foreach (MimeEntity attachment in mimeMessage.Attachments)
    
        if (!fileexists)
        
            using (FileStream file = new FileStream(System.IO.Path.Combine(System.IO.Path.Combine(docMap), bijlageNaam), FileMode.Create, FileAccess.Write))
            
                ms.Position = 0;
                ms.CopyTo(file);
                file.Flush();
            
         
     
 

但问题是,现在它显然会写入 fullContent,因为我使用的是 ms.CopyTo(file),这不是我想要的。

我正在尝试获取电子邮件的附件并将其写入文件。

【问题讨论】:

什么是fileexists?从mimeMessage中获取文件名,写入后关闭。 fileexists 只是一个 boolean ,使用文件名检查它是否不存在。因为我只想写新文件。我删掉了一些代码,让它专注于mime,而不是像fileexists这样的其他东西 mimekit.net/docs/html/M_MimeKit_MimeEntity_WriteTo_5.htm(即attachment.WriteTo(file))。或mimekit.net/docs/html/M_MimeKit_MimeEntity_WriteTo_7.htm 根本不需要file 【参考方案1】:

我通过将foreach 替换为using (var iter = new MimeIterator(mimeMessage)) 解决了我的问题

并使用while(item.MoveNext())开始循环

感谢我访问了MimePart,我能够获得Stream,然后我将该流放入另一个using (stream stream = part.content.stream),并将该流用于stream.CopyTo(file)

【讨论】:

你有没有像我建议的那样打电话给attachment.WriteTo 老实说我没有,虽然我认为它也会起作用.. 这是因为我面前有 2 个选项,我只是来回走动,直到一个最终起作用。然后我注意到了你的消息。

以上是关于从电子邮件中获取附件的主要内容,如果未能解决你的问题,请参考以下文章

如何从电子邮件中获取 csv 附件并保存

从 Outlook 获取附件

快速从电子邮件中获取 plist 附件(NS Cocoa 错误域代码 260)

VBA 使用多标准从 Outlook 下载电子邮件附件

从电子邮件附件中提取 To: 标头

使用 Access VBA 从 Outlook 获取附件