Development: MailHog vs mailpit
What is MailHog? MailHog 是針對開發上的電子郵件測試工具。 使用 MailHog 進行 SMTP 郵件發送。 可以透過 Web UI 查看郵件,或使用 JSON API 擷取郵件。 可選擇將郵件釋放到真實的 SMTP 伺服器以進行實際發送。 What is mailpit?...
What is MailHog?
MailHog 是針對開發上的電子郵件測試工具。
- 使用 MailHog 進行 SMTP 郵件發送。
- 可以透過 Web UI 查看郵件,或使用 JSON API 擷取郵件。
- 可選擇將郵件釋放到真實的 SMTP 伺服器以進行實際發送。
What is mailpit?
mailpit 同樣也是針對開發上的電子郵件測試工具,作用上與 MailHog 相同,
因為目前 MailHog 已不再維護,因此在 Laravel 10.x 開始,
Laravel Homestead 將 mailpit 涵蓋於預設的 Mail 測試工具中。
安裝
本身使用的環境:
Mac OS (Apple chip M2) Laravel version - 10.x Homestead version - v14.2.0 (Vagrant + Parallels) Ubuntu 20.04.5 / aarch64(arm64) Go version - `go version go1.17.4 linux/arm64
MailHog
假設已經安裝了
Laravel Homestead
- setup the
.envfile
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME="${APP_NAME}"
- setup the
Homestead.yamlfile
ports:
- send: 33060 # MySQL/MariaDB
to: 3306
- send: 8025 # Mailhog
to: 8025
都設定好之後,cd ~/Homestead,
接著透過 vagrant ssh,進入到 Homestead 虛擬機中,
以 MailHog 指令連線!
透過 http://localhost:8025/ 看到以下畫面就是成功啦!୧ʕ•̀ᴥ•́ʔ୨

安裝 MailHog
依照 MailHog 的文件說明,用以下指令安裝 MailHog: (可以依照自己的系統與環境做安裝)
- MacOS
brew update && brew install mailhog
- Debian / Ubuntu Go < v1.18
sudo apt-get -y install golang-go
go get github.com/mailhog/MailHog
mailpit
假設已經安裝了
Laravel Homestead
- setup the
.envfile
MAIL_MAILER=smtp
MAIL_HOST=app_url_without_http #這裡記得要改!
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME="${APP_NAME}"
- setup the
Homestead.yamlfile
ports:
- send: 33060 # MySQL/MariaDB
to: 3306
- send: 8025 # mailpit
to: 8025
都設定好之後,cd ~/Homestead,
接著透過 vagrant ssh,進入到 Homestead 虛擬機中,
以 mailpit 指令連線!
透過 http://localhost:8025/ 看到以下畫面就是成功啦!୧ʕ•̀ᴥ•́ʔ୨

安裝 mailpit
依照 mailpit 的文件說明,用以下指令安裝 mailpit:
- Linux & Mac users can install it directly to /usr/local/bin/mailpit with:
sudo bash < <(curl -sL https://raw.githubusercontent.com/axllent/mailpit/develop/install.sh)
這會將 mailpit 安裝在 /usr/local/bin/mailpit。
如果是 Mac 使用 mailpit?
前提是 Mac 要先安裝 Homebrew
- 安裝可以透過 Homebrew 指令:
brew install mailpit - 開啟連線就是:
brew services start mailpit - 關閉連線就是:
brew services stop mailpit - 要從 Mac 卸載就是:
brew uninstall mailpit
在使用 MailHog 遇到的問題
如果 port 已經被使用了,該怎麼辦?
-
在預設的 port (:8025) 已經被使用的情況下,就會在下
MailHog指令時出現以下錯誤訊息:MailHog 2023/12/05 20:02:15 Using in-memory storage [HTTP] Binding to address: 0.0.0.0:8025 2023/12/05 20:02:15 Serving under http://0.0.0.0:8025/ 2023/12/05 20:02:15 [SMTP] Binding to address: 0.0.0.0:1025 Creating API v1 with WebPath: Creating API v2 with WebPath: [HTTP] Error binding to address 0.0.0.0:8025: listen tcp 0.0.0.0:8025: bind: address already in use -
解決辦法: 用
lsof -i :8025指令找正在使用的 PID, 接著,以kill PID(PID 要改為上一步驟中所出現的數字)指令移除, 再重新下MailHog就可以連上了唷!
如果發生 application 無法連上 MailHog 的錯誤?
- 解決辦法:
透過
sudo vim /etc/hosts,加上127.0.0.1 mailhog, 可參考:Laravel Mail: How to Send Emails Easily in Laravel
參考資料
Laravel Homestead - Configuring mailpit mailpit mailpit doc Mailpit, an updated alternative to Mailhog MailHog