2026年5月29日

2026年5月29日

UbuntuにPostfixをインストールする方法(送信専用・外部SMTPリレーの設定)

Postfix は、Ubuntu で標準的に使われるメール転送エージェント(MTA)です。Web サーバーに入れると、WordPress のお問い合わせフォームやパスワードリセットのメールを、PHP の mail()(WordPress の wp_mail() が既定で使う方法)から送れるようになります。

この記事では、Ubuntu 24.04 LTS / 26.04 LTS を例に、Postfix をサーバーから外へ送るだけの用途で設定する手順を説明します(2026年11月時点。Postfix のバージョンは 24.04 が 3.8、26.04 が 3.10)。メールボックスを持って受信する本格的なメールサーバーには、ほかに Dovecot や TLS 証明書、受信側のスパム対策などが必要になり、この記事の範囲を超えます。

送り方を決める

方式 仕組み 向いている場合
直接送信 Postfix が宛先のメールサーバーへ直接届ける 自分でドメインの DNS(SPF・逆引き)を整えられ、送信ポート 25 が使える
外部 SMTP へのリレー 契約しているメールサービスの SMTP サーバーに認証して預ける 迷惑メール扱いを避けたい、ポート 25 が制限されている

多くのクラウドや VPS では、迷惑メール対策として外向きの TCP 25 番ポートが制限されていることがあります。直接送信を考えている場合は、先に確認します。

nc -vz -w 5 gmail-smtp-in.l.google.com 25

succeeded と出れば接続できます。タイムアウトする場合は 25 番が制限されているので、外部 SMTP へのリレー(ポート 587)を使うか、事業者の解除手続きを確認してください。

Postfix をインストールする

sudo apt update
sudo apt install postfix

インストール中に設定画面が表示されます。最初の「General type of mail configuration」で、次の中から選びます。

選択肢 内容
No configuration 設定ファイルを作らない
Internet Site 直接送受信する
Internet with smarthost 外へのメールは指定した SMTP サーバー(スマートホスト)経由で送り、ローカル宛ては自分で配送する
Satellite system すべてのメールをスマートホストへ送り、自分では配送しない
Local only サーバー内のユーザー間だけでやり取りする
  • 直接送信なら Internet Site を選びます。
  • 外部 SMTP へリレーするなら Internet with smarthost を選びます。続けてリレー先のホストを聞かれますが、この記事ではあとで relayhost を設定するので、そのままで進めてかまいません。認証の設定もあとで追加します。

次の「System mail name」には、送信元のドメイン名(例:example.com)を入力します。この値は /etc/mailname に保存され、ドメインを省いた宛先や送信者に補われます。

選び直したいときは、いつでも次のコマンドで同じ画面を開けます。

sudo dpkg-reconfigure postfix

main.cf の主な項目を確認する

設定は /etc/postfix/main.cf にあります。手で編集してもかまいませんが、postconf -e を使うと既存の行を書き換えるので、同じ項目が重複しません。

# 既定値から変更されている項目だけを表示
sudo postconf -n

送信専用のサーバーでは、外部からの SMTP 接続を受け付ける必要がありません。待ち受けをローカルだけにします。

sudo postconf -e 'inet_interfaces = loopback-only'
sudo postconf -e 'myhostname = web1.example.com'
sudo postconf -e 'mydestination = localhost.localdomain, localhost'
sudo systemctl restart postfix

インストール直後の mydestination には、「System mail name」で入力したドメインが含まれています。上のように localhost 系だけにしないと、そのドメイン宛てのメールが外に出ません。

項目 意味
myhostname このサーバーのホスト名(FQDN)。送信時の名乗りに使われる
myorigin 送信者のドメインを補うときの値。Ubuntu の既定は /etc/mailname
mydestination 自分宛てとして受け取るドメイン。サイトのドメインが入っていると、そのドメイン宛て(例:管理者のアドレス)が外へ出ずサーバー内に配送されるため、送信専用なら localhost 系だけにしておく
inet_interfaces 待ち受けるアドレス。loopback-only でローカルからのみ
relayhost 外部 SMTP にリレーする場合の宛先

inet_interfaces を変えたときは reload ではなく restart が必要です。

外部 SMTP にリレーする(認証あり)

契約しているメールサービスの SMTP サーバーに、ユーザー名とパスワードで認証して送る設定です。ホスト名・ポート・認証情報は利用するサービスの案内に従ってください。

認証用のモジュールを入れる

Ubuntu の postfix パッケージは、SMTP 認証に使う libsasl2-modules を「推奨」ではなく「提案」扱いにしているため、自動では入らないことがあります。入っていないと、認証で no mechanism available のようなエラーになります。

sudo apt install libsasl2-modules

認証情報のファイルを作る

/etc/postfix/sasl_passwd を作成します。左側は、次に設定する relayhost と同じ書き方にします。

[smtp.example.net]:587 username:password
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

postmap で検索用の sasl_passwd.db が作られます。ファイルを変更したら、そのたびに postmap を実行し直します。

main.cf に追加する

sudo postconf -e 'relayhost = [smtp.example.net]:587'
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'
sudo postconf -e 'smtp_sasl_tls_security_options = noanonymous'
sudo postconf -e 'smtp_tls_security_level = encrypt'
sudo systemctl reload postfix
  • ホスト名を [ ] で囲むと、MX レコードを引かずにそのホストへ直接接続します。
  • smtp_tls_security_level = encrypt で、リレー先との通信に TLS を必須にし、パスワードが暗号化されずに送られるのを防ぎます。
  • 465 番ポート(接続直後から TLS)を指定された場合は、relayhost = [smtp.example.net]:465 に加えて smtp_tls_wrappermode = yes が必要です。

送信をテストする

Postfix に含まれる sendmail コマンドで送ります。追加のパッケージは要りません。

printf 'Subject: Postfix test\n\nThis is a test.\n' | sudo /usr/sbin/sendmail -f wordpress@example.com you@example.net

ログで配送の結果を確認します。

sudo tail -f /var/log/mail.log

/var/log/mail.log が無い環境では、journal から確認します。

sudo journalctl -u 'postfix*' -f
ログの表示 意味
status=sent (250 ...) 相手のサーバーが受け取った
status=deferred 一時的な失敗。キューに残り、あとで再送される
status=bounced 恒久的な失敗。理由が続けて表示される
SASL authentication failed リレー先の認証に失敗した(ユーザー名・パスワード・sasl_passwd の左側を確認)

キューに残ったメールは postqueue -p で一覧を、sudo postqueue -f で再送を試せます。キューの操作は Postfixのメールキューを管理する方法 で詳しく説明しています。

設定の文法やファイルの権限は、次のコマンドで確認できます。問題が無ければ何も表示されません。

sudo postfix check

WordPress から送れるようにする

WordPress の wp_mail() は既定で PHP の mail() を使い、Ubuntu の PHP は /usr/sbin/sendmail を呼び出します。Postfix を入れれば、追加の設定なしで WordPress からメールが送られます。

管理画面の「ユーザー」→「新規追加」でテスト用ユーザーを作る、パスワードリセットを試すなどして、メールが届くか確認します。WordPress の送信者アドレスは既定で wordpress@サイトのドメイン です。

迷惑メール扱いを避けるために

送信者のドメインに SPF・DKIM・DMARC を設定していないと、Gmail などでは迷惑メールに振り分けられたり、受け取りを拒否されたりします。

  • 直接送信する場合:送信元サーバーの IP アドレスを SPF に含め、逆引き(PTR)をホスト名に合わせます。DKIM の署名には OpenDKIM などの追加設定が必要です。
  • 外部 SMTP にリレーする場合:利用するサービスの案内に従って SPF と DKIM の DNS レコードを登録します。

設定の確認方法は SPF・DKIM・DMARCの設定を確認する方法 で説明しています。

注意点

  • inet_interfaces = all のまま mynetworks を広げると、第三者に中継される「オープンリレー」になるおそれがあります。送信専用のサーバーでは loopback-only にしておきます。
  • sasl_passwd と sasl_passwd.db にはパスワードが入ります。権限は 600 にし、バックアップなどで外に出さないようにします。
  • ファイアウォール(ufw など)で 25 番ポートの受信を開ける必要はありません。送信専用なら閉じたままにします。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲