ホーム 記事一覧

Postfix でメールをリレー送信する設定 — SMTP AUTH 対応サーバーの使い方

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 認証ができないため、アプリパスワード を作成します。

  1. Google アカウント にログイン
  2. 「セキュリティ」を選択
  3. 「Google にログインする方法」セクションで「2 段階認証プロセス」を有効化
  4. 「アプリパスワード」を選択
  5. アプリの種類で「メール」を選択
  6. 「生成」をクリック
  7. 表示される 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 を再起動すること

おすすめ書籍

以下の書籍で、メールサーバーの基礎から実践的な運用まで学べます。