使用 smtp4dev 模擬 SMTP Server 測試發送 EMAIL

平時很常需要開發「寄送 Email」的功能,如果每次都需要使用實際的 Email Server 發送郵件,很可能在設定 Email Server 的階段就花費非長久的時間(因為各家的 Email Server 設定不同),而且也可能每次測試都要再發送好幾封,導致一直收到無用的信件。這時候就可以使用 smtp4dev 這樣的測試工具,在本機建立虛擬的 Email Server,直接在本機網頁就可以查看是否有收到 Email 、內容是否符合預期。

安裝

透過 docker 執行

使用 docker 非常簡單就可以建立一個測試服務,這裡的 25 就是寄送 email 的 port, 3000 port 就是網頁
    
docker run --name smtp4dev -d -p 25:25 -p 3000:80 rnwood/smtp4dev
    

網頁:
    
http://localhost:3000/
    

透過 dotnet 執行

筆者日常都是使用 .NET 開發,smtp4dev 這個套件也是使用 .NET 寫的,只要安裝了 .NET 8 後就可以很簡單的透過 dotnet tool 指令安裝 smtp4dev 工具:
    
dotnet tool install -g Rnwood.Smtp4dev
    

要執行也很簡單:
    
smtp4dev
    

網頁:
    
http://localhost:5000/
    

發送 Email 測試

開啟網頁後內容如下:


這裡使用 C# 的 MailKit 套件示範寄送 Email。
之前筆者有寫過一篇: .NET 7 使用 MailKit 寄送 email 教學 ,把程式碼抄過來就可以了寄送 Email 了:

安裝套件:
    
dotnet add package MailKit
    

程式碼:
    

string host = "localhost"; // 送信郵件主機
int port = 25; // 送信郵件主機連接埠
string account = "ruyut_mail_server@gmail.com"; // 帳號
string password = "ruyut_mail_server123"; // 密碼

string mailServerName = "Server"; // 寄信者名稱
string mailServerAddress = "ruyut_mail_server@gmail.com"; // 寄送者信箱
string targetAddress = "a@ruyut.com"; // 目標信箱

string subject = "測試信件"; // 信件主旨
string body = "這是一封測試信件"; // 信件內容


MimeMessage message = new();
message.From.Add(new MailboxAddress(mailServerName, mailServerAddress));
message.To.Add(MailboxAddress.Parse(targetAddress));
message.Subject = subject;
message.Body = new TextPart("html")
{
    Text = body
};

using SmtpClient client = new();
client.Connect(host, port, false);
client.Authenticate(account, password);
client.Send(message);
client.Disconnect(true)
    

上面大多可以隨便填入,唯一要注意的就是 host 是 localhost 或是本機的 ip ,而 port 除非使用 docker 部署有換過,不然預設就是 25 ,其他的寄信者、密碼等都不會驗證(畢竟只是測試服務)

再回到網頁上面就會看到收到一封 email 了!



參考資料:
GitHub - rnwood/smtp4dev

留言