You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:53:57