使用EWS OAuth2时FileAttachment.Load返回空文件问题排查
EWS OAuth2获取附件为空的排查原因
PropertySet未包含附件二进制内容
你的代码中,PropertySet仅指定了EmailMessageSchema.Attachments,这只能获取附件的元数据(名称、类型等),无法拉取实际的附件内容。BasePropertySet.FirstClassProperties不包含附件的二进制数据,需要显式添加FileAttachmentSchema.Content来确保加载附件内容:PropertySet props = new PropertySet(BasePropertySet.FirstClassProperties); props.Add(EmailMessageSchema.Attachments); props.Add(FileAttachmentSchema.Content);附件判断逻辑存在漏洞
代码里重复了两层完全相同的if (message.HasAttachments && message.Attachments[0] is FileAttachment)判断,这会导致如果邮件第一个附件不是FileAttachment(比如是ItemAttachment),后续所有合法文件附件都会被忽略。应该简化判断,遍历所有附件时逐个验证类型:if (message.HasAttachments) { message.IsRead = true; foreach (Attachment attachment in message.Attachments) { if (attachment is FileAttachment fileAttachment) { string ls_fileNamePath = Path.Combine(@"C:\DocsUpload\EmailTmp\", fileAttachment.Name); fileAttachment.Load(ls_fileNamePath); Console.WriteLine($"Attachment Downloaded: {fileAttachment.Name}"); } } }OAuth2权限范围不足
确认应用的OAuth2权限是否为Mail.Read(而非Mail.ReadBasic)。Mail.ReadBasic仅允许读取邮件核心元数据,不包含附件权限,必须配置Mail.Read或Mail.ReadWrite权限才能获取附件内容。附件加载方式问题
部分场景下,直接调用fileAttachment.Load(ls_fileNamePath)可能无法正确拉取内容,可以尝试先加载附件到内存,再保存到文件:fileAttachment.Load(); fileAttachment.Save(ls_fileNamePath);
内容的提问来源于stack exchange,提问作者user2731015
相关产品推荐
相关产品推荐

