Serilog Email Sink多收件人配置失败求助(ASP.NET Core 6.1)
Serilog Email Sink 2.4 多收件人邮件发送失败问题
开发基于ASP.NET Core 6.1的后台工作服务,使用Serilog Email Sink 2.4时,配置向多个收件人发送邮件失败:既无错误提示,也收不到邮件,但单个收件人时功能正常。已尝试多种分隔符格式,均无效,寻求解决办法。
当前配置代码如下:
{ "Name": "CustomEmail", "Args": { "ConnectionInfo": { "NetworkCredentials": { "UserName": "support@support.com", "Password": "1234" }, "FromEmail": "support@support.com", "MailServer": "smtp.gmail.com", "EmailSubject": "[{Level}] Multiple Requests", "Port": "465", "IsBodyHtml": false, "EnableSsl": true, "ToEmail": "to1@gmail.com; to2@gmail.com", "RestrictedToMinimumLevel": "Error", "OutputTemplate": "{Timestamp:yyyy-MM-dd HH:mm} [{Level}] {Message}{NewLine}{Exception}" } } }
已尝试的ToEmail格式:
"ToEmail": "to1@gmail.com; to2@gmail.com""ToEmail": "to1@gmail.com;to2@gmail.com""ToEmail": "to1@gmail.com, to2@gmail.com""ToEmail": "to1@gmail.com,to2@gmail.com"
解决办法
Serilog Email Sink 2.4的ToEmail字段不支持直接用分隔符填写多个收件人,需通过代码配置实现多收件人功能:
- 代码直接配置Sink
在Program.cs中手动初始化Logger时,传入多收件人数组:
Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(Configuration) .WriteTo.Email( connectionInfo: new EmailConnectionInfo { FromEmail = "support@support.com", MailServer = "smtp.gmail.com", Port = 465, EnableSsl = true, NetworkCredentials = new NetworkCredential("support@support.com", "1234"), EmailSubject = "[{Level}] Multiple Requests", IsBodyHtml = false, OutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm} [{Level}] {Message}{NewLine}{Exception}" }, toEmailAddresses: new[] { "to1@gmail.com", "to2@gmail.com" } ) .CreateLogger();
- 结合JSON配置扩展
若希望保留JSON中的基础配置,仅在代码中覆盖收件人参数:
var emailConfig = Configuration.GetSection("Serilog:WriteTo:0:Args:ConnectionInfo").Get<EmailConnectionInfo>(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(Configuration) .WriteTo.Email( connectionInfo: emailConfig, toEmailAddresses: new[] { "to1@gmail.com", "to2@gmail.com" } ) .CreateLogger();
- SMTP服务验证
确认Gmail SMTP服务未限制收件人数量,同时检查发件账号的安全设置:若启用了两步验证,需使用应用专用密码替代原账号密码;若未启用两步验证,需开启低安全性应用访问权限。
内容的提问来源于stack exchange,提问作者raysefo
相关产品推荐
相关产品推荐

