Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、Data Science

[tool]沒有mail server怎麼測試寄送email?快放過你的gmail來看看有那些可以測試用的smtp mail server

2017-12-06 Wednesday
image
圖片來源:https://pixabay.com/en/despair-alone-being-alone-archetype-513528/

不管什麼系統,只要需要通知使用者基本上都是使用email(電子郵件)方式通知,因此寄送email基本上是大部分系統都會需要的功能。

雖然正式環境一定會有mail server給我們使用,但是當我們在開發階段的時候,有時候需要測試寄送出來的mail內容是不是正確、有沒有跑版等問題,這個時候有一個測試用的mail server變得非常重要。

以前最常見應該就是借用gmail的mail server來測試發信,不過那個設定有些步奏,並且gmail也有做出一些限制,因此放過你的gmail吧,來看看有什麼工具可以讓我們測試email寄送。

關鍵字:測試mail server、測試smtp、mailtrap、smtp4dev、papercut、直接寫道檔案系統

測試機送mail的sample程式在github:dotnet-sendmail-smtp-server-review

比較表 - TL;DR

這邊將會像大家介紹4個工具:

  1. MailTrap
  2. Smtp4Dev
  3. papercut
  4. 直接寫到檔案
MailTrapSmtp4devpapercut直接寫到檔案
是否需要連網?
是否需要執行程式?
是否能直接看到html呈現結果?
是否提供轉寄功能?✖(付費版有)
檢查html和css是否合法和垃圾郵件分數?
運作機制Online服務提供測試的smtp server建立local samtp server建立local samtp server把寄送mail內容寫到檔案

一般來說,我的使用順序會是:MailTrap > smtp4dev > 直接寫到檔案 > papercut

Mailtrap能夠直接看到html內容,並且可以檢查html和css是否合法,最後能夠檢查出spam(垃圾郵件)指數。

不過有時候開發沒有網路的話,那麼就沒辦法用mailtrap,這個時候會改成使用smtp4dev只是用來收mail。

如果是在正式機器需要測試mail寄送,這個時候就會使用直接寫到檔案的方式來達到 - 因為在正式機器不一定能夠架設一個暫時的smtp server,因此smtp4dev無法使用。

只有當沒有網路並且要測試檢視html內容的時候才會考慮使用papercut。

MailTrap

Mailtrap是一個網路的服務,最主要的好處是能夠直接看到html內容並且能夠檢查html和vss是否都合法,最後裡面也有一個檢查spam指數。

準備使用

基本上和一般註冊服務沒什麼兩樣,註冊完了之後,可以直接建立一個inbox

image
建立一個box

建立出來了之後,可以直接點進去會看到:

  1. smtp的host
  2. smtp的帳號
  3. smtp的密碼
  4. 可以切換到C#
  5. 直接看到如何使用的範例程式碼
  6. 可以直接重新產生帳號和密碼
image
取得mailtrap相關的資訊

有了這些資訊之後,可以再App.config裡面設定成為:

<system.net>
    <mailSettings>
      <smtp from="test@test.com">
 <network enableSsl="true" userName="{你的帳號}" password="{你的密碼}"
                  host="smtp.mailtrap.io"/>
      </smtp>
    </mailSettings>
</system.net>
這邊把帳號和密碼改成你帳號裡面的值。

測試結果

在inbox裡面會多出一封mail,點下去之後:

image
第一個頁簽可以看到html呈現的結果

切換到Analysis頁簽可以看到:

  1. Spam Score - 被歸到垃圾郵件的可能性分數 - 以我們這個為例子看起來還好
  2. 右邊有詳細每一個分數說明,並且如果對於每一個規則有疑問可以點下去會到wikpedia看到更多資訊
  3. 下面還會分析寄送來源的domain是不是屬於被黑名單
image
Analysis指數說明
這邊注意一下,Spam Score還是屬於一個參考值,低不代表就不會被歸類在垃圾郵件,畢竟還是要看收的client端的設定。

切換到Check Html的頁簽,可以看到檢查email的html和css是否符合規範。

image
這筆email的html和css沒有問題

以上就是mailtrap的使用方式,和特色的部分,接下來看看smtp4dev

smtp4dev

這個工具是一個windows程式,開啟之後會建立一個smtp server在指定的port,因此mail寄送到這個工具裡面。

準備環境

程式小檔案:
smtp4dev最新版本是v3,這個版本用的是.Net Core並且改成使用web界面在瀏覽,這邊使用的還是v2的版本,因為windows程式很小run起來也不佔資源。

下載好之後,直接run起來,一開始會有一個防火墻規則要開通:

image
開通防火墻

預設聽的是port 25,假設要改可以透過options裡面的server頁簽,然後修改port numbers

image
預設聽的port

調整App.config如下:

<system.net>
    <mailSettings>
      <smtp from="test@test.com">
        <network host="localhost"/>
      </smtp>
    </mailSettings>
</system.net> 
   

測試結果

用和上一封一樣的mail內容,寄送出去之後,會看到清單會有一筆資料,可以點下Inspect來看內容:

image
看mail內容

無法看到html的render內容,如果要看到,需要有一個mail的工具(例如outlook或者thunderbird),然後按下View就可以。

smtp4dev和mailtrap比起來的好處是不需要網路,但是看html內容不方便。如果需要看html的呈現結果,但是又不想聯網,可以使用papercut。

papercut

papercut和smtp4dev是同一種類型的軟體,都是建立一個stmp的server。

papercut比smtp4dev的功能還來得豐富,例如轉寄出去等,不過這邊比較關注的是html呈現的部分。

準備環境

程式小檔案

和smtp4dev一樣,啟動的時候會需要開啟防火墻:

image
設定防火墻

預設port是25,如果要改可以透過option裡面的port來調整

image
設定port

測試結果

mail內容和設定可以和smtp4dev一樣,因此可以不用改,直接把程式run起來即可。

執行出來的結果如下:

image
mail內容
可以看到html內容會直接呈現出來。

papercut和smtp4dev除了html的部分還有就是轉寄(forward)的功能 - 這個轉寄功能還可以透過設定規則(rule)的方式來自動接到特定mail的時候自動轉寄出去。

一般來說papercut是當沒有網路的時候,要看email的html呈現才會使用。

有時候在正式機器需要測試寄送mail的內容,但是又沒辦法執行程式建立暫時的smtp server,這個時候就可以使用把mail寫到檔案的方式。

直接寫到檔案

如果沒有網路,並且沒有上面提到的兩個程式(或者因為權限的關係無法執行起來),那麼就可以用直接寫道檔案的方式。

準備環境

這個方式不需要安裝或者註冊什麼,只需要調整設定App.config即可:

<system.net>
    <mailSettings>
      <smtp from="test@test.com" deliveryMethod="SpecifiedPickupDirectory">
        <specifiedPickupDirectory pickupDirectoryLocation="d:\temp\mail" />
      </smtp>
    </mailSettings>
</system.net>

這邊主要設定會把mail內容寫到資料夾:d:\temp\mail下面。

這邊注意一下,資料夾是要存在的位置,如果不存在會出錯。

測試結果

直接把測試軟體run起來寄送email,會在資料夾d:\temp\mail多出一個guid名稱的檔案:

image
呈現結果

這個方式非常簡單,不需要任何服務或者任何軟體,隨時都可以設定,因此非常適合比較無法控制的環境測試的時候使用。

結語

寄送mail是個很常見的功能,因此在開發或者測試的時候能夠測試寄送mail變得很重要。

希望透過這篇能夠讓未來要測試寄送mail的時候變得更加方便和容易。

標籤:
2017-12-06 Wednesday
comments powered by Disqus