2010-10-22 63 views
8

我該如何做到這一點? SMTP類在開發機器上拋出關於找不到SMTP服務器的錯誤。有沒有辦法在開發機器上測試發送電子郵件?如何在開發機器上測試從asp.net發送電子郵件?

+1

發佈您用來發送電子郵件的代碼以及您看到的異常/錯誤消息。然後有人可能會幫助... – 2010-10-22 15:42:24

+1

而錯誤是...? – 2010-10-22 15:43:48

回答

14

肖恩,

直接從我的web.config:

<smtp deliveryMethod="SpecifiedPickupDirectory"> 
    <network host="ignored" /> 
    <specifiedPickupDirectory pickupDirectoryLocation="c:\email_c#" /> 
    </smtp> 

這工作得很好,只要能夠查看 '電子郵件' 說得到保存到pickupDirectoryLocation目錄。

試試看......

+1

爲了澄清,在web.config中,這個應該在 - > - > - > Jason 2013-10-18 15:41:18

+0

jason,因爲延遲迴復,離開週末。是的,這是正確的。祝你好運! – 2013-10-20 18:44:05

+0

我想添加這個我的Asp.Net MVC 5應用程序的web.config,但沒有任何反應,我需要做其他事情嗎? – Jordan 2015-11-13 13:14:09

0

我通常通過爲SmtpClient創建一個包裝類,然後在我的測試中嘲弄包裝來做到這一點。這從我的單元測試中刪除了實際的郵件客戶端/服務器依賴關係。包裝本身相對較薄,所以我不覺得需要爲它創建測試。通常我會將我的集成級別測試作爲臨時環境中的探索性測試。暫存環境通常使用生產郵件服務器,但使用「假」數據 - 例如,用我自己的數據替換客戶電子郵件地址。儘管如此,我希望客戶端即使在您的開發系統上也能正常工作,除非您的郵件服務器受防火牆保護,否則會妨礙您的開發系統與之交談。你能詳細說明你遇到的錯誤嗎?

+0

我認爲其他答案提供了一個更簡單的解決方案,它更適合於「發送測試郵件」而不是「測試發送郵件」這個問題。 – awrigley 2010-10-22 16:28:13

+0

@awrigley - 對於自動化測試,處理成功和錯誤條件,嘲諷肯定比使用真實的類更容易。我覺得使用mock確保我的代碼正確地使用這個類,並進行探索性測試以確保集成正確完成,我感到很舒服。如果你有測試,你需要確保郵件格式正確,鏈接在其中工作等等,然後使用某種存儲和轉發機制,允許你手動檢查它們。注意:嘲諷不排除其他類型的測試。 – tvanfosson 2010-10-22 16:50:22

+0

tvanfosson,我不懷疑你說的有效性或質量。但是......這不是問題的答案。同樣,問題是關於發送測試電子郵件,而不是測試發送電子郵件。因此,需要回答這個問題的人會感到困惑。 – awrigley 2010-10-22 18:18:05

5

你可以轉儲磁盤上的文件,通過configuring System.Net.Mail.SmtpClient使用SpecifiedPickupDirectory類型的deliveryMethod,我發現an example on SO

+0

當爲使用SmtpClient的類編寫單元測試時,我使用單元測試運行了一個進程內smtp服務器。我爲此使用了[netDumpster](http://netdumbster.codeplex.com/)。 – Marijn 2010-10-22 15:48:20

+0

我必須安裝一個smtp客戶端嗎? – 2010-10-22 15:50:42

+0

不,你可以在你的單元測試中運行它。 – Marijn 2010-10-22 15:51:52

0

沒有看到有沒有什麼我們可以做的異常。只要你的開發機器上的細節指向一個合適的smtp服務器,並具有正確的憑據,那麼你的代碼將不會是問題,你應該看看鏈條。儘管一切正常,但我拒絕了目標機器的請求。花了兩年和三年檢查憑證後,從我們的服務器等發送我追蹤到的錯誤,以防止邁克菲阻止電子郵件端口25 ...

2

這有幾個可能的原因。
1)您的代碼是否配置爲在開發期間使用本地SMTP服務器,並且您已升級到Windows 7?您的本地主機上不再有SMTP服務器可用。查找並下載smtp4dev以允許您的本地主機捕獲已發送的電子郵件。
2)如果您使用的是遠程SMTP服務器,請檢查您的Windows防火牆以確認您可以發送外發郵件。如果是,請確認您的機器/用戶名有權通過該服務器發送郵件。快速telnet:25到服務器應該讓你知道你的連接是否被拒絕。

2

通過「測試發送電子郵件」你的意思是發送測試電子郵件,而不是正式/單元測試,我喜歡用smtp4dev假設:作爲頁解釋 http://smtp4dev.codeplex.com/

,它是一個虛擬的SMTP服務器,基本攔截你的應用程序發出的消息,允許你檢查這些消息,並確保一切正常,如你所願。這是一個Windows應用程序,如果您正在開發ASP.NET,希望這不是問題。

3

我知道這是一個古老的線程,但我只是偶然發現了這個服務: http://mailtrap.io/

這是受詛咒的輝煌。它用作應用程序的虛擬SMTP服務器,並不實際發送電子郵件,但允許您在瀏覽器(或通過API)中輕鬆查看它們。

這是殺手。