Postfix でメールをリレー送信する設定 — SMTP AUTH 対応サーバーの使い方
この記事でわかること
- リレー送信が何かがわかる
- Postfix で SMTP AUTH リレーを設定できる
- Gmail と一般 SMTP サーバーの両方で設定できる
- 設定が終わった後のテスト方法がわかる
まず知っておきたい用語
| 用語 | 意味 |
|---|---|
| Postfix | Linux で使われるメジャーな SMTP サーバー |
| SMTP | メールを送信するためのプロトコル |
| SMTP AUTH | SMTP サーバーにログインするための認証機能 |
| リレー | 自分のサーバーから直接送らず、別の SMTP サーバーに預けて送ってもらうこと |
| SASL | SMTP AUTH で使われる認証の仕組み |
なぜリレーが必要なのか
直接送ると問題になることがある
Postfix をインストールしただけのサーバーは、メールを 直接送信 しようとします。
[Postfix] → [宛先のメールサーバー]
この方法には以下の問題があります:
| 問題 | 原因 |
|---|---|
| メールが届かない | ポート 25 がブロックされている(クラウド providers が多い) |
| スパム判定される | IP の評価が低く、スパムフォルダに入る |
| SPF/DKIM エラー | DNS の設定が不足している |
リレーを使えば解決
[Postfix] → [Gmail SMTP] → [宛先のメールサーバー]
リレー先の SMTP サーバー(Gmail など)が「このメールは正しい」と証明してくれるため、確実に届きます。
Gmail をリレー先に設定する
Gmail は無料で SMTP AUTH が利用でき、信頼性も高いです。
ステップ 1: Gmail のアプリパスワードを生成
通常の Gmail パスワードでは SMTP 認証ができないため、アプリパスワード を作成します。
- Google アカウント にログイン
- 「セキュリティ」を選択
- 「Google にログインする方法」セクションで「2 段階認証プロセス」を有効化
- 「アプリパスワード」を選択
- アプリの種類で「メール」を選択
- 「生成」をクリック
- 表示される 16文字のパスワード を控える(二度と表示されない)
注意: 2 段階認証が有効でないとアプリパスワードは作成できません。
ステップ 2: Postfix と SASL モジュールをインストール
sudo apt update
sudo apt install -y postfix mailutils libsasl2-modules
インストール時にダイアログが表示されます:
- General type of mail configuration: 「Internet Site」を選択
- System mail name: サーバーのドメイン名を入力
重要:
libsasl2-modulesは必須です。これがないと SMTP AUTH 認証ができません。
ステップ 3: SASL パスワードファイルを作成
sudo nano /etc/postfix/sasl_passwd
以下の内容を貼り付けます:
[smtp.gmail.com]:587 あなたのメールアドレス:アプリパスワード
例:
[smtp.gmail.com]:587 yourname@gmail.com:abcdefghijklmnop
ヒント: アプリパスワードにスペースがある場合(
abcd efgh ijkl mnop)、スペースを除いたabcdefghijklmnopでもOKです。
ファイルを保存した後、権限とハッシュDBを作成します:
# パスワードファイルの権限を厳密に
sudo chmod 600 /etc/postfix/sasl_passwd
# Postfix が読めるハッシュデータベースを作成
sudo postmap /etc/postfix/sasl_passwd
# 確認(2ファイルあることを確認)
ls -la /etc/postfix/sasl_passwd*
ステップ 4: Postfix の設定を変更
sudo nano /etc/postfix/main.cf
以下の設定を追加します:
# --- Gmail リレー設定 ---
# リレー先
relayhost = [smtp.gmail.com]:587
# SASL 認証を有効化
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
# TLS(暗号化)を有効化
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
# 送信元のメールアドレス(任意)
smtp_generic_maps = hash:/etc/postfix/generic
ステップ 5: 送信元アドレスの変更(任意)
デフォルトでは root@サーバー名 が送信元になります。Gmail アドレスに変更する場合:
sudo nano /etc/postfix/generic
以下を追加:
root yourname@gmail.com
@localhost yourname@gmail.com
ハッシュDBを作成:
sudo postmap /etc/postfix/generic
ステップ 6: Postfix を再起動してテスト
sudo systemctl restart postfix
テストメールを送信:
echo "テストメールです" | mail -s "テスト" yourname@gmail.com
届いたか確認:
sudo tail -f /var/log/mail.log
ログに status=sent があれば成功です。
一般的な SMTP サーバーをリレー先に設定する
Gmail 以外の SMTP サーバー(会社のメール、プロバイダ、SendGrid など)を使う場合の設定例です。
設定の構造
# リレー先(サーバーとポートを変更)
sudo postconf -e 'relayhost = [smtp.example.com]:587'
# SASL 認証
sudo postconf -e 'smtp_sasl_auth_enable = yes'
sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
sudo postconf -e 'smtp_sasl_security_options = noanonymous'
# TLS
sudo postconf -e 'smtp_tls_security_level = encrypt'
sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
よくある SMTP サーバーの設定例
| サーバー | relayhost | 認証情報 |
|---|---|---|
| Gmail | [smtp.gmail.com]:587 |
メールアドレス + アプリパスワード |
| Outlook/Office 365 | [smtp.office365.com]:587 |
メールアドレス + パスワード |
| SendGrid | [smtp.sendgrid.net]:587 |
ユーザー名: apikey、パスワード: APIキー |
| Mailgun | [smtp.mailgun.org]:587 |
postmaster@ドメイン名 + パスワード |
| Amazon SES | [email-smtp.region.amazonaws.com]:587 |
IAM の SMTP 認証情報 |
SASL パスワードファイルの書き方
# [リレー先]:ポート ユーザー名:パスワード
# Gmail の場合
[smtp.gmail.com]:587 user@gmail.com:abcdef1234567890
# SendGrid の場合
[smtp.sendgrid.net]:587 apikey:SG.xxxxxxxxxxxxxxxx
# 会社の SMTP の場合
[mail.company.co.jp]:587 smtp-user:smtp-password
注意: 設定変更後は必ず
sudo postmap /etc/postfix/sasl_passwdを実行してください。
トラブルシューティング
SASL authentication failed
535-5.7.8 Username and Password not accepted
| 確認項目 | 対処 |
|---|---|
| アプリパスワードか? | Gmail は通常パスワードでは認証できない |
| 2段階認証は有効か? | アプリパスワードの生成には2段階認証が必須 |
sasl_passwd の形式は正しいか? |
[smtp.gmail.com]:587 user:pass のスペースに注意 |
postmap は実行したか? |
sudo postmap /etc/postfix/sasl_passwd |
SASL authentication failed: no mechanism available
no worthy mechs found
SASL モジュールがインストールされていません:
sudo apt install -y libsasl2-modules
sudo systemctl restart postfix
メールが届かない
# ログを確認
sudo grep "status=" /var/log/mail.log | tail -20
# ポート 587 が疎通するか確認
nc -zv smtp.gmail.com 587
TLS 関連のエラー
# CA 証明書のパスを確認
ls /etc/ssl/certs/ca-certificates.crt
# Postfix の TLS 設定を確認
postconf | grep tls
設定を確認するコマンド一覧
| コマンド | 目的 |
|---|---|
postconf | grep relay |
リレー設定の確認 |
postconf | grep sasl |
SASL 設定の確認 |
postconf | grep tls |
TLS 設定の確認 |
sudo systemctl status postfix |
Postfix の状態確認 |
sudo tail -f /var/log/mail.log |
リアルタイムでログ監視 |
echo "test" | mail -s "test" user@example.com |
テストメール送信 |
まとめ
- リレー は「メールを別の SMTP サーバーに預けて送ること」
- クラウド環境ではポート 25 がブロックされていることが多いので、リレーは必須
- Gmail は無料で利用でき、アプリパスワードで SMTP AUTH が可能
- 設定変更後は必ず
postmapを実行し、Postfix を再起動すること
おすすめ書籍
以下の書籍で、メールサーバーの基礎から実践的な運用まで学べます。