繁体   English   中英

在C#中绕过电子邮件发送

[英]Bypass email sending in c#

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

谢谢!

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

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

我将安装轻巧的调试SMTP服务器,例如PaperCut

几乎没有开销。 没有发送任何真实的电子邮件,它只允许您查看要发送的内容。

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

例如,您可能有一个名为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实例,而无需触摸任何构建并决定发送电子邮件的代码。 这也意味着您无需安装任何其他第三方软件,从而降低了开发或测试环境的复杂性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM