モック用のSMTPサービスMailHogをRocky Linuxに立ち上げる
WEBアプリ開発においてサクッとメールテストしたい時があると思います。本番のSMTPサーバーをまだ用意していない時に、モックテストで使えるSMTPサーバーがあると便利です。MailHogならそれを叶えてくれます。
MailHogは以下の特徴があります。
- 軽量なSMTPサーバーモックで、メールの送受信をエミュレートできます。
- ローカル環境で動作し、簡単にセットアップ可能。
- メールはWeb UIやAPI経由で確認できます。
MailHogのインストール
Rocky LinuxにMailHogをインストールする手順を以下にまとめました。MailHogはGoで書かれているため、Goをインストールしてビルドします。
1. Goのインストール
sudo dnf install -y golang
2. MailHogのインストール
go install github.com/mailhog/MailHog@latest
3. PATHにGoのバイナリを追加
GoがインストールされるディレクトリをPATHに追加します:
export PATH=$PATH:$(go env GOPATH)/bin
4. MailHogを確認
インストールが成功していれば、以下のコマンドで起動できます:
MailHog
5. MailHogバイナリを /usr/local/bin に移動する
システム全体で使えるようにするために、MailHogのバイナリを一般的なディレクトリに移動します。
sudo mv /root/go/bin/MailHog /usr/local/bin/
移動後、再確認します:
which MailHog
期待される結果:
/usr/local/bin/MailHog
6. MailHogのデフォルトポート
- SMTPポート: 1025
- Web UIポート: 8025
SMTPはデフォルトで1025ポートに設定されています。ユーザー名とパスワードはblankのままで大丈夫です。また、MailHogはWebアプリケーションを提供しており、Webブラウザで http://<サーバーIP>:8025 へアクセスすると受信メールを確認できます。
SMTP設定例
- SMTPサーバー: localhost
- ポート: 1025
- 認証: 不要
- 暗号化: なし (STARTTLS不要)
MailHogをサービスとして登録
MailHogをシステムサービスとして登録して自動起動するように設定します。
1. サービスファイルを作成
sudo vi /etc/systemd/system/mailhog.service
内容:
[Unit]
Description=MailHog Service
After=network.target
[Service]
ExecStart=/usr/local/bin/MailHog
Restart=always
User=root
[Install]
WantedBy=multi-user.target
2. サービスを有効化
sudo systemctl daemon-reload
sudo systemctl enable mailhog
sudo systemctl start mailhog
3. サービスのステータス確認
sudo systemctl status mailhog
4. テストと確認
Webブラウザで http://<サーバーIP>:8025 にアクセスし、MailHogのインターフェースが表示されることを確認します。これで、MailHogをRocky Linux上で正常に動作させることができます。
トラブルシューティング
環境によってはSELinuxやファイアーウォールを適宜解放しなければならいかもしれません。以下の手順を問題解決の参考になさってください。
SELinuxの設定を確認
Rocky LinuxではSELinuxが有効な場合があります。SELinuxの制限でPermission deniedが発生している可能性があります。
1. SELinuxのステータス確認:
getenforce
- 出力が Enforcing の場合はSELinuxが有効です。
2. SELinuxを一時的に無効化してテスト:
sudo setenforce 0
3. サービスを再起動して動作確認:
sudo systemctl restart mailhog
sudo systemctl status mailhog
4. 問題が解決した場合、SELinuxに永続的な許可を設定する:
sudo chcon -t bin_t /usr/local/bin/MailHog
5. SELinuxを元に戻す:
sudo setenforce 1