如何在localhost上运行MVC3应用程序时禁用NLog发送电子邮件

时间:2012-07-31 12:25:30

标签: asp.net-mvc-3 nlog

有人知道如何在localhost上运行MVC3应用程序上的测试时禁用NLog应用程序发送电子邮件吗?我希望NLog只在应用程序在部署到Web服务器时出错时才发送电子邮件。为了实现这一目标,我必须写些什么?

由于

2 个答案:

答案 0 :(得分:1)

您可以尝试通过更改邮件设置来“禁用”邮件发送:

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="SpecifiedPickupDirectory">
                <specifiedPickupDirectory pickupDirectoryLocation="c:\whateverfolder"/>
      </smtp>
    </mailSettings>
  </system.net>

这将删除计算机上某个文件夹中的电子邮件。这并没有真正阻止邮件,但它阻止了它们被发送。

如果您正在运行手动或自动测试,还可以更轻松地验证电子邮件是否已“发送”。

答案 1 :(得分:1)

您可以使用filters。如果服务器名称是localhost,则可以使用when-filter来过滤邮件目标的邮件。这假设您使用localhost请求站点。但是,您可以使用任何Layout renderer作为条件。

请参阅下面的示例配置,这对我有用。

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <targets>
  <target xsi:type="Mail" name="m" layout="${message}" subject="Log" 
          to="mail@domain.com" from="app@domain.com" body="${message}"
          smtpServer="localhost">
  </target>
 </targets>
 <rules>
  <logger name="*" minlevel="Fatal" writeTo="m" >
    <filters>
      <when condition="equals('${aspnet-request:serverVariable=SERVER_NAME}','localhost')" action="Ignore" />
    </filters>
  </logger>
 </rules>
</nlog>