Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、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
image image

開發階段沒有沒有 mail server 應該怎麼測試寄送email?

Mail 寄信通知是很長見的功能,不過在開發階段怎麼有個測試用的 SMTP Mail Server 用來測試寄送 email,並且可以避免不小心真的寄送信件出去給客戶呢?

可以考慮用以下幾個方式:

  1. MailTrap - 可以直接看到完整客戶會收到的內容,檢測 spam 指數,並且不會真的寄送個收件人
  2. smtp4dev - 如果沒有網路的環境,那麼用這個免安裝軟體就很適合
  3. 直接寫到檔案 - 如果是正式機器,沒辦法執行軟體的話,用這個方式
  4. papercut - 以上幾個方法都不行,並且不需要看到 html 內容呈現樣子,在考慮

比較表 - 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的時候變得更加方便和容易。

標籤:

如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
2017-12-06 Wednesday
comments powered by Disqus