使用AE.Net IMAP保存邮件附件失败,求指导解决方法
解决AE.Net.Mail保存IMAP邮件附件无效的问题
直接针对你的代码问题给出修正方案:
核心问题排查与修复
- 目标目录未创建:你的代码未检查目标文件夹是否存在,
Save方法不会自动创建目录,导致无报错但无法写入文件。 - 保存路径拼接错误:当前代码把文件夹名当成了文件名前缀,导致附件被错误命名且未存入指定文件夹。
- 未拉取完整邮件内容:默认调用
GetMessages可能仅获取邮件头部,需指定参数确保拉取包含附件的完整数据。
修改后的完整代码
using System.IO; using AE.Net.Mail; var targetFolder = @"D:\test\savedattachementsfromYandexIMAP"; // 确保目标文件夹存在 if (!Directory.Exists(targetFolder)) { Directory.CreateDirectory(targetFolder); } // 使用using确保IMAP连接正确释放 using (var imapClient = new ImapClient("imap.yandex.com", "username", "password", AuthMethods.Login, 993, true)) { imapClient.SelectMailbox("INBOX"); Console.WriteLine($"收件箱邮件总数: {imapClient.GetMessageCount()}"); // 指定FetchOptions.Full拉取完整邮件(含附件) var messages = imapClient.GetMessages(0, 10, fetchOptions: FetchOptions.Full); foreach (var msg in messages) { Console.WriteLine($"处理邮件: {msg.Subject}"); foreach (var att in msg.Attachments) { var savePath = Path.Combine(targetFolder, att.Filename); att.Save(savePath); Console.WriteLine($"已保存附件: {savePath}"); } } }
额外注意事项
- Yandex邮箱需提前开启IMAP服务,若开启两步验证,需使用应用专用密码替代原密码登录。
- 新增控制台输出可直观确认附件保存状态,方便排查路径或权限问题。
内容的提问来源于stack exchange,提问作者Nikolai Guryanov
相关产品推荐
相关产品推荐

