asp.net net.mail - 在调试模式下将所有电子邮件路由到不同的电子邮件地址

时间:2009-03-12 14:09:37

标签: .net asp.net system.net.mail

System.Web.HttpContext.Current.IsDebuggingEnabled为真时,是否有所有电子邮件都转到其他地址?或者我需要一个新的课程,我用它来发送电子邮件吗?

5 个答案:

答案 0 :(得分:4)

我设置了一个SMTP服务器,让你的webapp使用它作为其外发邮件服务器(在某种配置中指定)。对于生产站点,服务器将正常运行,但是对于调试,您可以配置SMTP服务器以将所有邮件路由到您选择的地址。这样做的好处就是根本不更改您的应用程序,如果更改行为可以防止您尝试重现的错误等等,这可能很有用。我的公司使用这种方法进行质量检查,效果非常好。

答案 1 :(得分:2)

您可以将它放在您使用它的任何地方的代码中:

if (System.Web.HttpContext.Current.IsDebuggingEnabled)
{
 mail.To = "debug@debug.com";
}
else
{
 mail.To = recipientAddress;
}

或者只是为获取电子邮件地址构建一个简单的包装器(甚至可以使用收件人地址的方法获取收件人地址)或者整个smtpclient或mailmessage类的包装器。

答案 2 :(得分:2)

我必须说实话,我用的是旧的

#if DEBUG
    Mail.To("debug@debugaddress.com");
#else
    Mail.To("actualrecipient@destinationaddress.com");
#endif

阻止我在我的制作应用中浮动调试代码。我用于数据库访问的方法是使用dns条目,即database1.domain.com,在我的开发机器上的hosts文件中,它指向我的本地系统,在我的生产机器上,它指向数据库服务器。您可以使用类似的东西来安装调试邮件服务器和生产邮件服务器,但与上面的第一个解决方案相比,这似乎有些过分。

答案 3 :(得分:1)

我认为,处理此问题的最佳方法是通过邮件客户端的代理类。创建代理类时,使用参数指示是否以调试模式运行。让代理支持与邮件客户端相同的接口,但在调试模式下以静默方式替换传出的电子邮件地址。

public class MailProxy
{
     private bool IsDebug { get; set; }
     private string DebugAddress { get; set; }
     private SmtpClient Client { get; set; }

     public MailProxy( SmtpClient client,
                       bool debugging,
                       string debugAddress )
     {
         this.IsDebug = debugging;
         this.DebugAddress = debugAddress;
     }

     public void Send( MailMessage message )
     {
         if (this.IsDebug)
         {
             message.To = new MailAddress(this.DebugAddress);
         }
         this.Client.Send( message );
     }

     ...
}

答案 4 :(得分:1)

我们对tvanfosson详细介绍的MailProxy方法使用了类似的解决方案。但是我们有一些差异,我觉得值得一提。第一个是我们只是在开发或测试环境中扩展SmtpClient类并覆盖Send方法。我们使用配置文件来确定环境。然后,我们在需要发送电子邮件时随时使用此类。此类将确定当前登录到应用程序的用户并重定向生成的所有电子邮件,如果登录用户因任何原因无法使用,则会将故障转移到标准收件人列表。如果您有多个人正在测试或开发,这会有所帮助,因为他们只会收到他们生成的电子邮件。我们还将邮件的原始收件人添加到邮件正文中。在测试工作流类型消息以确保它们转到正确的个人时,这也很有用。最后,我发现将[DEV]或[QA]标签添加到邮件主题是有用的,这样我就可以在我的邮件客户端中设置规则来处理所有测试邮件。

相关问题