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

本文关键字:电子邮件 绕过 | 更新日期: 2023-09-27 18:17:16

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

谢谢!

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

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

<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? */ }
}

不知道你的代码是如何设置的,我不知道是否使用单例邮件将是你最好的选择,某种形式的手动依赖注入,依赖注入框架,或者甚至其他方法。

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