asp.net net.mail - 将所有的电子邮件发送到不同的电子邮件地址,在调试模式

StackOverflow https://stackoverflow.com/questions/638768

  •  10-07-2019
  •  | 
  •  

反正是有让所有电子邮件到不同的地址时System.Web.HttpContext.Current.IsDebuggingEnabled是真的吗?或者我需要,我用它来到处发送电子邮件一类新的?

有帮助吗?

解决方案

我们使用了类似的解决方案,通过tvanfosson详述的方法MailProxy。但是,我们有,我觉得是值得一提的有一些差别。第一个是我们根本扩展SmtpClient类,并在开发或测试环境时覆盖发送方法。我们用一个配置文件来确定环境。然后,我们使用这个类我们随时需要发送电子邮件。这个类将决定谁是当前登录到应用程序和重定向产生的所有这些电子邮件,在故障转移到收件人的标准列表,如果登录用户无论出于何种原因无法使用。这可以帮助,如果你有几个人谁正在测试或开发,因为他们只会得到他们所产生的电子邮件。我们还预先设置邮件的原始收件人的邮件的正文。这种测试工作流程类型的消息时,以确保他们将正确的人又是非常有用的。最后,我觉得这是非常有用的[DEV]或[QA]标签添加到邮件的主题,所以我可以建立一个规则,我的邮件客户端来处理所有测试的消息。

其他提示

我已经建立了一个SMTP服务器,并有你的web应用的使用,作为其发邮件服务器(在某种配置的规定)。对于生产基地,服务器会表现得正常,但进行调试,您可以配置SMTP服务器将所有邮件到您选择的地址。这丝毫不是改变你的应用程序的优势,如果改变行为,防止发生的历史,你试图重现错误,可能是有用的,等我公司采用这种方法进行QA和它的作品相当不错的。

您既可以把这个在你的代码到处都使用它:

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

或者只是建立电子邮件地址的获取(甚至在收件人地址会工作方法的吸气器的东西)或整个smtpclient MAILMESSAGE或类的包装。一个简单的包装

我必须说实话我用好老

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

要停止其调试代码飘在我的生产应用程序在我身边。我使用的数据库访问的方法是使用DNS条目,即database1.domain.com并在宿主我的开发机器上的文件它指向我的本地系统和我生产的机器上它指向数据库服务器。你可以使用类似的东西有一个调试邮件服务器和生产的邮件服务器,但它似乎矫枉过正相比,上面的第一个解决方案。

要处理这种情况最好的方法,我认为,是通过对邮件客户端的代理类。当您创建的代理类使用参数指示是否在调试模式下操作与否。有代理支持相同的接口作为邮件客户端,但是当它在调试模式下运行默默接替离任的电子邮件地址。

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 );
     }

     ...
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top