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
.env
file1
2
3
4
5
6
7
8MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
[email protected]
MAIL_FROM_NAME="${APP_NAME}" - setup the
Homestead.yaml
file都設定好之後,1
2
3
4
5ports:
- send: 33060 # MySQL/MariaDB
to: 3306
- send: 8025 # Mailhog
to: 8025cd ~/Homestead
,
接著透過vagrant ssh
,進入到 Homestead 虛擬機中,
以MailHog
指令連線!
透過 http://localhost:8025/ 看到以下畫面就是成功啦!୧ʕ•̀ᴥ•́ʔ୨
安裝 MailHog
依照 MailHog 的文件說明,用以下指令安裝 MailHog:
(可以依照自己的系統與環境做安裝)
MacOS
1
brew update && brew install mailhog
Debian / Ubuntu Go < v1.18
1
2sudo apt-get -y install golang-go
go get github.com/mailhog/MailHog
mailpit
假設已經安裝了
Laravel Homestead
- setup the
.env
file1
2
3
4
5
6
7
8MAIL_MAILER=smtp
MAIL_HOST=app_url_without_http #這裡記得要改!
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
[email protected]
MAIL_FROM_NAME="${APP_NAME}" - setup the
Homestead.yaml
file都設定好之後,1
2
3
4
5ports:
- send: 33060 # MySQL/MariaDB
to: 3306
- send: 8025 # mailpit
to: 8025cd ~/Homestead
,
接著透過vagrant ssh
,進入到 Homestead 虛擬機中,
以mailpit
指令連線!
透過 http://localhost:8025/ 看到以下畫面就是成功啦!୧ʕ•̀ᴥ•́ʔ୨
安裝 mailpit
依照 mailpit 的文件說明,用以下指令安裝 mailpit:
- Linux & Mac users can install it directly to /usr/local/bin/mailpit with:這會將 mailpit 安裝在
1
sudo bash < <(curl -sL https://raw.githubusercontent.com/axllent/mailpit/develop/install.sh)
/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
指令時出現以下錯誤訊息:1
2
3
4
5
6
7
8MailHog
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