【发布时间】:2019-09-16 21:35:40
【问题描述】:
我给自己发了一封测试邮件,邮件正文中有一张图片。此图片不是附件,只是粘贴到电子邮件正文中。
我正在使用 MailKit 阅读这封传入的电子邮件,但找不到如何访问该图像。
我正在使用:
MimeMessage message = client.Inbox.GetMessage(uid);
如果我使用message.ToString(),我可以看到它在那里:
...
Content-Disposition: inline; filename="image001.png"; size=4570;
creation-date="Mon, 16 Sep 2019 09:21:07 GMT";
modification-date="Mon, 16 Sep 2019 09:21:07 GMT"
Content-ID: <image001.png@01D56A4B.7CD234E0>
Content-Transfer-Encoding: base64
iVBORw0KGgoAAAANSUhEUgAAAJUAAAAlCAY...
我假设 base64 编码的行是实际的图像,但我该如何理解呢?
编辑
这是我的测试代码:
static void Main(string[] args)
{
ImapClient client = new ImapClient();
client.Connect("...
client.Authenticate("...
client.Inbox.Open(FolderAccess.ReadWrite);
IList<UniqueId> uids = client.Inbox.Search(SearchQuery.All);
foreach (UniqueId uid in uids)
{
MimeMessage message = client.Inbox.GetMessage(uid);
IList<IMessageSummary> info = client.Inbox.Fetch(new[] { uid }, MessageSummaryItems.All);
foreach (MimeEntity me in message.Attachments)
HandleMimeEntity(me, 1);
}
client.Disconnect(true);
}
static void HandleMimeEntity(MimeEntity entity)
{
int i, j;
Multipart multipart = entity as Multipart;
if (multipart != null)
{
Console.WriteLine("multipart");
for (i = 0; i < multipart.Count; i++)
{
Console.WriteLine(i + " - " + multipart[i].ContentType.MimeType + " (" + multipart[i].IsAttachment + ")");
HandleMimeEntity(multipart[i]);
}
return;
}
MessagePart rfc822 = entity as MessagePart;
if (rfc822 != null)
{
MimeMessage message = rfc822.Message;
Console.WriteLine("mimemessage - " + message.Subject);
HandleMimeEntity(message.Body, lvl + 1);
return;
}
MimePart part = (MimePart)entity;
Console.WriteLine("mimepart - " + part.FileName);
// do something with the MimePart, such as save content to disk
}
【问题讨论】:
-
你在
message.Body得到了什么? -
我会说在html中搜索标签“img”并读取他的值,然后转换为base64或者如果是链接下载图像
-
我希望有比自己解析原始电子邮件正文更简单的方法(这就是我选择 MailKit 的原因)。也许我会看看那里还有什么。
-
为什么需要自己解析邮件正文?你没有任何意义...... MailKit 已经为你解析了它。
-
这就是我所希望的。我只需要知道如何获取这个内联图像。有一个 htmlbody 属性,但它只包含一个指向文件名的 img 标签,但我如何获得实际的“文件”。它不是附件,所以不在
message.Attachments中。我还必须解析 img 标签才能找到文件名,但我可以忍受。