绕过c#中的电子邮件发送

时间:2011-12-08 13:10:43

标签: c# debugging smtp

我正在调试一个在点击按钮后发送电子邮件的应用,但是电子邮件是从它使用的组件发送的,我无法访问其源,它使用localhost作为smtp服务器。是否可以跳过此电子邮件发送?我不想安装smtp服务器只是为了这样做......

谢谢!

3 个答案:

答案 0 :(得分:2)

您应该能够在配置文件中添加设置,将电子邮件写为文件。

<specifiedPickupDirectory pickupDirectoryLocation="c:\test"/>

答案 1 :(得分:1)

我会安装一个轻量级调试SMTP服务器,如PaperCut

几乎没有开销。没有真正的电子邮件被发送,它只是让你看到将要发送的内容。

答案 2 :(得分:1)

另一种选择是创建一个包装类来从库中抽象第三方对象,然后在调试时使用虚拟包装类而不是实时组件类。这种方法的另一个优点是可以轻松编程您的虚拟对象以将电子邮件转储到文件中,这样您就可以看到电子邮件输出的样子(或者创建程序化测试以测试某些操作的电子邮件内容,而无需涉及电子邮件服务器)。

例如,你可以有一个名为Emailer的类,它使用一个IEmailProvider实例来发送电子邮件(IEmailProvider.SendEmail(...))。然后你可以有两个实现IEmailProvider的类,一个调用第三方库并在应用程序中默认使用的类,另一个是你的虚拟包装器,它不对内容做任何事情或将其写入磁盘。 如下所示:

public class Emailer{
   private IEmailProvider _provider;

   public Emailer(IEmailProvider provider){
      _provider = provider;
   }

   public SendEmail(...){
      _provider.SendEmail();
   }
}

interface IEmailProvider{
   SendEmail(...);
}

public RealEmailProvider : IEmailProvider{
   // ... real code to implement send email method
}

public FakeEmailProvider : IEmailProvider{
   public SendEmail(...){ /* Do Nothing? */ }
}

在不知道你的代码是如何设置的情况下,我不知道使用Singleton for Email是你最好的选择,某种手动依赖注入,依赖注入框架,甚至是其他方法。

这样做的额外好处是,如果您以后想要添加额外的逻辑来记录每封电子邮件,以不同的方式进行通信,或者替换该电子邮件组件,您所要做的就是更新您的真实EmailProvider实例而不用触摸任何构建和决定发送电子邮件的代码。这也意味着您无需安装任何其他第三方软件,从而降低了开发或测试环境的复杂性。