从电子邮件中获取附件
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 个选项,我只是来回走动,直到一个最终起作用。然后我注意到了你的消息。以上是关于从电子邮件中获取附件的主要内容,如果未能解决你的问题,请参考以下文章