如何使用 IMAP 在 C# 中从 gmail 下载附件?
How to download attachment from gmail in C# using IMAP?
我使用控制台应用程序从使用 IMAP 服务的邮件中下载文档。我在 IMAP 应用程序中使用 "S22.Imap" 程序集。我得到的所有邮件都包含 IEnumerable 中的附件。我如何下载这些文件?
using (ImapClient client = new ImapClient(hostname, 993, username, password, AuthMethod.Login, true))
{
IEnumerable<uint> uids = client.Search(SearchCondition.Subject("Attachments"));
IEnumerable<MailMessage> messages = client.GetMessages(uids,
(Bodypart part) =>
{
if (part.Disposition.Type == ContentDispositionType.Attachment)
{
if (part.Type == ContentType.Application &&
part.Subtype == "VND.MS-EXCEL")
{
return true;
}
else
{
return false;
}
}
return true;
}
);
}
如果您能给出解决方案,我将不胜感激
我认为最好的来源是文档 http://smiley22.github.io/S22.Imap/Documentation/
看到这个link是关于从电子邮件
下载附件
附件类型有一个名为 ContentStream
的 属性 您可以在 msdn 文档中看到:https://msdn.microsoft.com/en-us/library/system.net.mail.attachment(v=vs.110).aspx.
使用它你可以使用类似这样的东西来保存文件:
using (var fileStream = File.Create("C:\Folder"))
{
part.ContentStream.Seek(0, SeekOrigin.Begin);
part.ContentStream.CopyTo(fileStream);
}
编辑:
所以在 GetMessages
完成后你可以做:
foreach(var msg in messages)
{
foreach (var attachment in msg.Attachments)
{
using (var fileStream = File.Create("C:\Folder"))
{
attachment.ContentStream.Seek(0, SeekOrigin.Begin);
attachment.ContentStream.CopyTo(fileStream);
}
}
}
messages.Attachments.Download();
messages.Attachments.Save("location", fileSaveName)
这样您就可以使用 IMAP 下载电子邮件中的附件
此代码会将附件文件存储在 C 盘的下载文件夹中。
foreach (var msg in messages)
{
foreach (var attachment in msg.Attachments)
{
byte[] allBytes = new byte[attachment.ContentStream.Length];
int bytesRead = attachment.ContentStream.Read(allBytes, 0, (int)attachment.ContentStream.Length);
string destinationFile = @"C:\Download\" + attachment.Name;
BinaryWriter writer = new BinaryWriter(new FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None));
writer.Write(allBytes);
writer.Close();
}
}
希望对某人有所帮助
我使用控制台应用程序从使用 IMAP 服务的邮件中下载文档。我在 IMAP 应用程序中使用 "S22.Imap" 程序集。我得到的所有邮件都包含 IEnumerable 中的附件。我如何下载这些文件?
using (ImapClient client = new ImapClient(hostname, 993, username, password, AuthMethod.Login, true))
{
IEnumerable<uint> uids = client.Search(SearchCondition.Subject("Attachments"));
IEnumerable<MailMessage> messages = client.GetMessages(uids,
(Bodypart part) =>
{
if (part.Disposition.Type == ContentDispositionType.Attachment)
{
if (part.Type == ContentType.Application &&
part.Subtype == "VND.MS-EXCEL")
{
return true;
}
else
{
return false;
}
}
return true;
}
);
}
如果您能给出解决方案,我将不胜感激
我认为最好的来源是文档 http://smiley22.github.io/S22.Imap/Documentation/
看到这个link是关于从电子邮件
下载附件附件类型有一个名为 ContentStream
的 属性 您可以在 msdn 文档中看到:https://msdn.microsoft.com/en-us/library/system.net.mail.attachment(v=vs.110).aspx.
使用它你可以使用类似这样的东西来保存文件:
using (var fileStream = File.Create("C:\Folder"))
{
part.ContentStream.Seek(0, SeekOrigin.Begin);
part.ContentStream.CopyTo(fileStream);
}
编辑:
所以在 GetMessages
完成后你可以做:
foreach(var msg in messages)
{
foreach (var attachment in msg.Attachments)
{
using (var fileStream = File.Create("C:\Folder"))
{
attachment.ContentStream.Seek(0, SeekOrigin.Begin);
attachment.ContentStream.CopyTo(fileStream);
}
}
}
messages.Attachments.Download();
messages.Attachments.Save("location", fileSaveName)
这样您就可以使用 IMAP 下载电子邮件中的附件
此代码会将附件文件存储在 C 盘的下载文件夹中。
foreach (var msg in messages)
{
foreach (var attachment in msg.Attachments)
{
byte[] allBytes = new byte[attachment.ContentStream.Length];
int bytesRead = attachment.ContentStream.Read(allBytes, 0, (int)attachment.ContentStream.Length);
string destinationFile = @"C:\Download\" + attachment.Name;
BinaryWriter writer = new BinaryWriter(new FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None));
writer.Write(allBytes);
writer.Close();
}
}
希望对某人有所帮助