如何为NBug附加额外文件?发送邮件遇连接异常求助
解决WPF中NBug发送带附件邮件时连接被强制关闭的问题
看起来你在使用NBug给WPF应用发送异常报告并附加自定义文件时,遇到了SMTP连接被远程主机强制关闭的问题,我来帮你梳理可能的问题点和解决办法:
1. 修复文件处理的资源泄漏问题
你的代码中手动调用Close()来释放文件资源,但如果中间出现异常可能导致文件被锁定,NBug读取附加文件时的异常可能间接引发SMTP发送失败。建议改用using语句自动管理资源,同时用Path.Combine避免路径拼接错误:
var machineInfoPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, FileNames.FILE_NAME_MACHINE_INFO); if (!File.Exists(machineInfoPath)) { using (var stream = File.Create(machineInfoPath)) using (var tw = new StreamWriter(stream)) { tw.WriteLine("The very first line!"); } } NBug.Settings.AdditionalReportFiles.Add(machineInfoPath);
2. 检查NBug的SMTP核心配置
连接被远程主机强制关闭,绝大多数情况是SMTP服务器配置错误:
- 确认SMTP服务器地址、端口是否匹配(比如Gmail用587端口+STARTTLS,Outlook支持587/465端口)
- 启用SSL/TLS:设置
NBug.Settings.Mail.SSL = true;,不同端口对应不同的加密方式,不要混淆 - 验证邮箱账号权限:部分邮箱(如Gmail、Outlook)需要启用“应用专用密码”或开放低安全性应用访问(根据邮箱提供商要求)
- 排查网络限制:公司防火墙可能屏蔽25、465、587等SMTP端口,需要确认网络环境允许访问目标SMTP服务器
3. 调整NBug配置与事件注册的顺序
你当前先注册了异常处理事件,再配置附加文件,可能导致NBug初始化时未加载到附加文件配置。建议先完成所有NBug配置,再注册异常事件:
// 第一步:完成所有NBug配置 var machineInfoPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, FileNames.FILE_NAME_MACHINE_INFO); // ... 创建文件的代码 ... NBug.Settings.AdditionalReportFiles.Add(machineInfoPath); // 设置SMTP关键参数 NBug.Settings.Mail.To = "your-report-email@example.com"; NBug.Settings.Mail.From = "sender-email@example.com"; NBug.Settings.Mail.SmtpServer = "smtp.example.com"; NBug.Settings.Mail.Port = 587; NBug.Settings.Mail.SSL = true; NBug.Settings.Mail.UserName = "your-email-username"; NBug.Settings.Mail.Password = "your-email-password"; // 第二步:注册异常处理事件 AppDomain.CurrentDomain.UnhandledException += NBug.Handler.UnhandledException; Application.Current.DispatcherUnhandledException += NBug.Handler.DispatcherUnhandledException;
4. 独立测试SMTP连接
先脱离NBug,用原生SmtpClient测试带附件的邮件发送,确认SMTP配置和网络环境是否正常:
using (var client = new SmtpClient("smtp.example.com", 587)) { client.EnableSsl = true; client.Credentials = new NetworkCredential("your-username", "your-password"); var message = new MailMessage("from@example.com", "to@example.com", "Test Report", "Test body content"); message.Attachments.Add(new Attachment(machineInfoPath)); client.Send(message); }
如果这段代码报错,说明问题出在SMTP配置或网络上,和NBug无关;如果测试成功,再回到NBug的配置细节排查。
内容的提问来源于stack exchange,提问作者Kristóf Zelei
相关产品推荐
相关产品推荐

