c# - 如何使用 Mimekit 从 IOS 保存附件
问题描述
我的这段代码实际上在所有情况下都有效,除非图像是由 IOS 设备发送的,在这种情况下附件显示为空白。
我通过 IMAP 连接并获取 UIDS,然后提取有关电子邮件的信息、保存附件并保存整个电子邮件。
一切都很好,除非发件人通过 IOS 附加文档或图像,在这种情况下,代码找不到任何文档。
我能做些什么 ?
谢谢
try {
IMailFolder mailFolder = imapClient.GetFolder(Folder);
mailFolder.Open(FolderAccess.ReadOnly);
MimeMessage m = mailFolder.GetMessage(new UniqueId(Decimal.ToUInt32(UID)));
//MailMessage m = imapClient.GetMessage(UID, false, false);
Subject = m.Subject;
From_Name = (m.Sender != null) ? m.Sender.ToString() : "";//m.Sender.DisplayName;
From_Address = (m.From != null) ? m.From.ToString() : "";
Cc_Address = (m.Cc != null) ? m.Cc.ToString() : "";
Date_Sent = m.Date.DateTime;
MessageID = m.MessageId;
Body = m.TextBody;
m.WriteTo (EmailName);
if ( Save_Attachments && Attachments_Path != "") {
System.IO.Directory.CreateDirectory(Attachments_Path);
DataTable dt = new DataTable();
dt.Columns.Add("Path", typeof(String));
foreach (MimeEntity attachment in m.Attachments)
{
if (attachment is MimePart)
{
MimePart part = (MimePart)attachment;
string path = System.IO.Path.Combine(Attachments_Path, removeIllegal(part.FileName));
using (var stream = File.Create(path))
{
part.Content.DecodeTo(stream);
}
DataRow dr = dt.NewRow();
dr["Path"] = path;
dt.Rows.Add(dr);
}
}
Attachments = dt;
} else {
Attachments = null;
}
}
catch (Exception ex) {
Subject = "";
From_Name = "";
From_Address = "";
Cc_Address = "";
Date_Sent = new DateTime();
MessageID = "";
Body = "";
Attachments = null;
throw ex;
}
解决方案
您需要使用 MimeMessage.BodyParts 而不是使用 MimeMessage.Attachments - 但请注意 BodyParts还包含消息的文本正文。
我在这里有更多信息:http: //www.mimekit.net/docs/html/Working-With-Messages.htm
完成您想做的事情的一种快速而肮脏的方式可能是这样的:
foreach (var attachment in m.BodyParts.Where (x => x.ContentDisposition?.FileName != null))
(注意:您需要确保using System.Linq;
在 C# 文件的顶部添加)
推荐阅读
- python - python3 - for/while 循环遍历列表
- python - 在 spaCy 的自定义句子边界中使用 POS 和 PUNCT 标记
- javascript - 如何在反应中动态添加表格行?
- python - 在大型数据集上计算 (TI) 的最有效和 Pythonic 方法是什么?
- android - 我应该在我的 .zprofile 中添加什么来重新获得对 $HOME/.zshrc 的访问权限?
- angular - Ionic/Angular 应用程序未从 MongoDb 数据库中获取数据
- containers - 如果在 host 和 hostnetwork 容器中都设置 iptables 规则,这些 iptables 规则的匹配顺序是什么
- google-admin-sdk - 如何通过 Google Workspace Admin SDK 获得可用许可?
- r - abline() 不适用于 weighted.hist()
- javascript - partialLeft 和 partialRight 函数的问题