簡體   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