【问题标题】:Any way to use 'from' address from system.net/mailSettings/smtp in NLog mail target?有什么方法可以在 NLog 邮件目标中使用 system.net/mailSettings/smtp 中的“发件人”地址?
【发布时间】:2016-07-20 22:59:34
【问题描述】:

如果出现一些致命错误,我想通过 NLog 邮件目标发送电子邮件。 我也已经在 web.config 中配置了 system.net/mailSettings/smtp

当我设置useSystemNetMailSettings="true" 时,NLog 使用 system.net/mailSettings/smtp 中的所有内容,除了“发件人”地址。所以我需要再指定一次,特别是对于邮件目标。

我做了什么?我刚刚创建了一个变量“MailFrom”,并在应用程序启动时以编程方式对其进行了初始化。

<nlog>
    <variable name="MailFrom" value=""/>
    <targets>
        <target name="mail" type="Mail" from="${var:MailFrom}" html="false" subject="Subject" to="ToList" useSystemNetMailSettings="true"/>
    </targets>
</nlog>
var section = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as SmtpSection;
if (section != null)
    LogManager.Configuration.Variables["MailFrom"] = section.From;

也许您知道一些更好的方法?谢谢。

【问题讨论】:

    标签: c# email nlog system.net.mail


    【解决方案1】:

    此选项已添加到 NLog 4.3.2。


    PS:更漂亮的方法是使用FindTargetByName

     var section = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as SmtpSection;
     if (section != null)
     {
    
         var mailtarget = LogManager.Configuration.FindTargetByName<MailTarget>("mail");
         if (mailtarget != null)
             mailtarget.From = section.From;
     }
    

    【讨论】:

    • 谢谢。看起来不错。我必须做的唯一更改是在获取目标时使用 AsyncTargetWrapper 而不是 MailTarget。 var target = LogManager.Configuration.FindTargetByName("mail"); var mailtarget = target.WrappedTarget as MailTarget;
    猜你喜欢
    • 2014-03-04
    • 2011-03-31
    • 2012-11-07
    • 2011-09-06
    • 2016-06-16
    • 1970-01-01
    • 2020-04-25
    • 2019-01-26
    • 2023-03-29
    相关资源
    最近更新 更多