如何从Gmail获取多个附件并将它们保存到文件夹中
本文关键字:保存 文件夹 Gmail 获取 | 更新日期: 2023-09-27 18:36:29
我正在尝试从邮件中获取附件并将它们保存到我选择的文件夹中。当邮件包含单个附件时,无论文件类型如何,这都会完美地保存到我的文件夹中,但如果邮件包含多个附件,则只有第一个附件保存到文件夹中。请检查我的代码以了解我在说什么。
#region Get External Attachments
requestMessage = service.Users.Messages.Get("me", messageId);
Message attMessage = requestMessage.Execute();
IList<MessagePart> parts = attMessage.Payload.Parts;
foreach (MessagePart p in parts)
{
if (p.Filename.Length > 0 && p.Filename != null)
{
string attid = p.Body.AttachmentId;
if (attid != null)
{
MessagePartBody attachPart = service.Users.Messages.Attachments.Get("me", messageId, attid).Execute();
byte[] data = FromBase64ForUrlString(attachPart.Data);
string decodedString = Convert.ToBase64String(data);
var dir = @"G:'" + messageId;
Console.WriteLine("FileName:"+" "+p.Filename);
// Console.WriteLine("MimeType:"+p.MimeType+" "+p.Filename);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
File.WriteAllBytes(Path.Combine(dir, p.Filename), data);
}
}
}
}
#endregion
我已经用带有三个附件(jpg、excel 文件和 pdf)的邮件测试了上面的代码,这里 jpg 是第一个附件,它是唯一保存在文件夹中的附件。我想将所有附件文件保存到文件夹中。
Console.WriteLine("FileName:"+" "+p.Filename);
上面的行返回所有附件的名称,但我的代码没有保存它们。我哪里做错了?
更新:
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
// File.WriteAllBytes(Path.Combine(dir, p.Filename), data);
}
File.WriteAllBytes(Path.Combine(dir, p.Filename), data);
用上面的行更改我的代码后,一切都像魅力一样工作。
//上面解决方案中缺少的函数
public static byte[] FromBase64ForUrlString(string base64ForUrlInput)
{
int padChars = (base64ForUrlInput.Length % 4) == 0 ? 0 : (4 - (base64ForUrlInput.Length % 4));
StringBuilder result = new StringBuilder(base64ForUrlInput, base64ForUrlInput.Length + padChars);
result.Append(String.Empty.PadRight(padChars, '='));
result.Replace('-', '+');
result.Replace('_', '/');
return Convert.FromBase64String(result.ToString());
}