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

AspNet Core应用配置Serilog邮件Sink无法发送邮件,求排查

排查Serilog Email Sink发送失败的问题

我之前配置Serilog邮件日志的时候也踩过类似的坑,结合你的代码和Gmail SMTP的特性,给你梳理几个关键排查方向:

  • 先确认Serilog.Email Sink包已安装
    这个邮件输出组件不是Serilog核心自带的,一定要通过NuGet安装Serilog.Sinks.Email包。如果没装,代码不会报错,但邮件发送的逻辑根本不会执行——这是很多人一开始容易忽略的点。

  • 重点检查Gmail的SMTP安全配置
    Gmail现在对SMTP登录的限制非常严格,普通密码基本无法直接使用:

    • 如果你开启了两步验证,必须创建应用专用密码(App Password),用这个密码替换你配置里的Password,普通账号密码会被直接拒绝。
    • 确认NetworkCredentials.UserName是你的完整Gmail地址(比如xxx@gmail.com),而不是代码里的user——这个小细节错了的话,认证肯定失败。
    • 现在Gmail已经移除了“允许不太安全的应用”选项,所以两步验证+应用专用密码是目前唯一可行的SMTP登录方式。
  • 验证是否真的触发了Error级别的日志
    你的配置里限制了只有LogEventLevel.Error及以上级别的日志才会发邮件,所以先手动触发一条错误日志测试:

    Log.Error("测试邮件发送的错误日志");
    

    运行程序后,先确认这条日志已经写入了文件,再去查邮件——如果连文件里都没有这条错误日志,那根本不会触发邮件逻辑。

  • 开启Serilog的SelfLog查看内部错误
    Serilog默认不会输出自身的运行错误,你可以在初始化Logger之前加上这行代码,查看邮件发送时的异常信息:

    Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg));
    

    运行后看控制台输出,就能直接看到是认证失败、连接超时还是其他问题,这是定位问题最快的方法。

  • 核对SMTP配置细节
    你的代码里EnableSsl = true、Port = 587是正确的Gmail SMTP配置,但可以再检查:

    • FromEmail是不是和NetworkCredentials.UserName一致?Gmail一般要求发件人账号和登录账号匹配。
    • batchPostingLimit = 1是正确的(有一条错误就发邮件),不需要调整,但可以暂时去掉restrictedToMinimumLevel,用Info级别的日志测试,排除级别限制的问题。
  • 测试SMTP连接的可用性
    可以用Telnet或者SMTP测试工具,先验证你的Gmail账号能不能通过smtp.gmail.com:587正常发送邮件,排除网络环境或者账号本身的问题。比如用Telnet连接后,输入EHLO localhost,再尝试AUTH LOGIN,输入用户名和应用专用密码的Base64编码,看能不能认证成功。

按照这些步骤排查,基本就能找到问题所在了——我之前就是因为没使用应用专用密码,折腾了好久才搞定。

内容的提问来源于stack exchange,提问作者Evgeni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:22:22