でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
テストの前に——Postfixの起動確認
テスト送信の前に、Postfixが正常に起動しているかを確認してください。# Postfixの状態を確認する # systemctl status postfix postfix.service - Postfix Mail Transport Agent Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; preset: disabled) Active: active (running) since Tue 2026-04-01 10:00:00 JST; 2h ago Process: 1234 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS) # 停止している場合は起動する # systemctl start postfix # systemctl enable postfix
また、SMTPポート(25番)でリッスンしているかも確認しておきましょう。
# 25番ポートでPostfixが待ち受けているか確認する # ss -tlnp | grep :25 LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=1235,fd=13))
mailコマンドでテスト送信する
1. mailコマンドのインストール確認
mailコマンドはデフォルトではインストールされていない場合があります。# RHEL/CentOS系でのインストール # dnf install mailx -y # Ubuntu/Debian系でのインストール # apt install mailutils -y # インストール確認 # which mail /usr/bin/mail
2. 基本的なテスト送信
インストール後、以下のコマンドでテストメールを送信できます。# 件名と宛先を指定して送信する(本文は標準入力から) # echo "テストメールです。" | mail -s "Postfix送信テスト" pakira@example.com # 複数行の本文を送る場合 # mail -s "テスト" pakira@example.com << EOF > これはテストメールです。 > Postfixの動作確認用です。 > EOF
# キューにメールが溜まっていないか確認する # postqueue -p Mail queue is empty
キューにメールが残っている場合は、配送に問題が発生しています。後述の「ログ確認」で原因を特定してください。
3. ローカル配送テスト(root宛)
まず外部に送る前に、ローカル(サーバー自身)に送れるか確認するのが安全です。# root宛てにテストメールを送る # echo "ローカル配送テスト" | mail -s "Local Test" root # rootのメールボックスを確認する # mail -u root # または # cat /var/spool/mail/root
外部への送信が失敗する場合は、ネットワーク・DNS・リレー設定の問題です。
telnetでSMTP通信を直接確認する
mailコマンドはPostfixを経由してメールを送るため、SMTP通信の詳細が見えません。telnetを使うと、SMTPのやり取りを1コマンドずつ手動で確認でき、どのステップで失敗しているかが一目瞭然になります。
1. ローカルのSMTPに接続する
# ローカルの25番ポートに接続する # telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.linuxmaster.jp ESMTP Postfix (2.10.1) # 220 が返れば接続成功。次のコマンドを入力する
接続できない場合(「Connection refused」)は、Postfixが起動していないか、25番ポートがファイアウォールでブロックされています。
2. SMTPコマンドを手動で入力してテストする
接続後、以下の順でSMTPコマンドを入力してください。# ①挨拶(HELOまたはEHLO) EHLO localhost 250-mail.linuxmaster.jp 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 SMTPUTF8 # ②送信者を指定 MAIL FROM:
250 2.1.0 Ok # ③受信者を指定 RCPT TO: 250 2.1.5 Ok # ④本文の入力開始 DATA 354 End data with . # ⑤メールヘッダーと本文を入力 Subject: SMTPテスト From: test@linuxmaster.jp これはtelnetによるSMTPテストです。 . 250 2.0.0 Ok: queued as ABC123 # ⑥終了 QUIT 221 2.0.0 Bye
・220:接続成功・サービス準備完了
・250:コマンド成功
・354:DATA入力開始(「.」だけの行で終了)
・221:接続を閉じる
・4xx:一時的なエラー(再試行可能)
・5xx:永続的なエラー(設定の修正が必要)
3. 「relay access denied」エラーが出た場合
RCPT TO:
554 5.7.1 : Relay access denied
自分のドメイン宛には送れるが、外部ドメイン宛に送れない場合は、送信元IPアドレスが mynetworks に含まれていない可能性があります。
# /etc/postfix/main.cf の mynetworks を確認する # grep mynetworks /etc/postfix/main.cf mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 # サーバー自身のIPを mynetworks に追加する場合 # vi /etc/postfix/main.cf mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24 # 設定変更後はリロードが必要 # systemctl reload postfix
メールログでエラーの原因を特定する
テスト送信後は必ずログを確認してください。成功・失敗に関わらず、Postfixはすべての動作をログに記録しています。
1. メールログの確認方法
# RHEL/CentOS系(rsyslog使用) # tail -50 /var/log/maillog # Ubuntu/Debian系(rsyslog使用) # tail -50 /var/log/mail.log # systemd-journald使用環境(RHEL 9等) # journalctl -u postfix --since "1 hour ago" # または # journalctl -xe -u postfix
2. 正常送信時のログの見方
# 正常に送信できた場合のログ例 Apr 1 10:05:12 mail postfix/pickup[1234]: ABC123: uid=0 from=
Apr 1 10:05:12 mail postfix/cleanup[1235]: ABC123: message-id=<20260401010512.ABC123@mail.linuxmaster.jp> Apr 1 10:05:12 mail postfix/qmgr[1236]: ABC123: from= , size=412, nrcpt=1 (queue active) Apr 1 10:05:13 mail postfix/smtp[1237]: ABC123: to= , relay=mail.example.com[203.0.113.1]:25, delay=0.8, delays=0.1/0.0/0.4/0.3, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as XYZ456) Apr 1 10:05:13 mail postfix/qmgr[1236]: ABC123: removed
最後の行の「removed」はキューから削除された(正常配送完了)を意味します。
3. エラー時のログの読み方
# DNS解決失敗の場合 Apr 1 10:05:15 mail postfix/smtp[1237]: ABC123: to=
, relay=none, delay=30, delays=0.1/0.0/30/0, dsn=4.4.3, status=deferred (Host or domain name not found. Name service error for name=example-bad.jp type=MX: Host not found, try again) # 接続タイムアウトの場合 Apr 1 10:05:45 mail postfix/smtp[1237]: ABC123: to= , relay=none, delay=300, delays=0.1/0.0/300/0, dsn=4.4.1, status=deferred (connect to mail.example.com[203.0.113.1]:25: Connection timed out)
・dsn=2.x.x:成功
・dsn=4.x.x:一時的なエラー(自動再試行される)
・dsn=5.x.x:永続的なエラー(設定変更が必要)
送信テスト用ツール swaks(より高度なテスト)
mailコマンドやtelnetより高度なテストには、swaks(Swiss Army Knife for SMTP)が便利です。# swaksのインストール # dnf install swaks -y # RHEL/CentOS系 # apt install swaks -y # Ubuntu/Debian系 # 基本的なテスト送信 # swaks --to pakira@example.com --from test@linuxmaster.jp --server localhost # SMTP-AUTHを使ったテスト # swaks --to pakira@example.com --from test@linuxmaster.jp \ --server mail.linuxmaster.jp \ --auth LOGIN \ --auth-user test@linuxmaster.jp \ --auth-password "yourpassword" # TLS(STARTTLS)を使ったテスト # swaks --to pakira@example.com --server mail.linuxmaster.jp --tls
本番環境のメールサーバー設定確認には、telnetよりswaksを使うことをお勧めします。
トラブルシュート——よくあるエラーと対処法
「Connection refused」が出る場合
Postfixが起動していないか、25番ポートがファイアウォールでブロックされています。# Postfixの起動確認 # systemctl status postfix # ファイアウォールの確認(firewalld) # firewall-cmd --list-all | grep 25 # 25番ポートを開放する # firewall-cmd --add-service=smtp --permanent # firewall-cmd --reload
「Relay access denied」が出る場合
前述のとおり、mynetworksの設定を確認してください。また、relayhost経由で送信する設定になっている場合は、relayhostサーバーが適切に設定されているか確認してください。
# relayhostの確認 # grep relayhost /etc/postfix/main.cf relayhost = [smtp.gmail.com]:587 # relayhostが設定されている場合は、認証情報も確認する # cat /etc/postfix/sasl_passwd [smtp.gmail.com]:587 user@gmail.com:password
メールが届かない(キューにも残らない)
送信したはずなのにキューにも見当たらない場合、mailコマンド自体がPostfixを経由していない可能性があります。# mailコマンドがどのMTAを使っているか確認する # alternatives --display mta mta - status is auto. link currently points to /usr/sbin/sendmail.postfix /usr/sbin/sendmail.postfix - priority 90 Current `best' version is /usr/sbin/sendmail.postfix. # sendmailコマンドがPostfixを指しているか確認する # ls -la /usr/sbin/sendmail lrwxrwxrwx. 1 root root 21 Mar 1 10:00 /usr/sbin/sendmail -> /etc/alternatives/mta
別のMTAを指している場合は `alternatives --config mta` で切り替えてください。
本記事のまとめ
PostfixのSMTP送信テストに使うコマンドと手順を一覧にまとめます。| テスト方法 | コマンド | 用途 |
|---|---|---|
| 基本テスト送信 | echo "本文" | mail -s "件名" 宛先 |
手軽なテスト送信 |
| ローカル配送テスト | echo "本文" | mail -s "件名" root |
Postfix自体の動作確認 |
| SMTP直接対話 | telnet localhost 25 |
SMTP通信の詳細確認・切り分け |
| 高度なテスト | swaks --to 宛先 --server ホスト |
AUTH/TLS含む総合テスト |
| キュー確認 | postqueue -p |
送信後のキュー状態確認 |
| ログ確認(RHEL系) | tail -f /var/log/maillog |
エラー原因の特定 |
| ログ確認(systemd) | journalctl -u postfix -f |
リアルタイムログ監視 |
telnetによるSMTP直接対話は一手間かかりますが、エラーがどのSMTPコマンドで発生しているかが明確になるため、複雑なトラブルの切り分けに非常に有効です。
postqueue / mailq / postsuper でテスト後のメールキューを管理する
テスト送信を繰り返していると、配送に失敗したメールがキューに溜まったままになるケースがあります。postqueue・mailq・postsuper を使ってキュー状態を確認し、不要なメールを削除する手順を整理します。1. キューに溜まったメールを確認する
まずはキューの中身を確認してください。postqueue -pとmailqは同じ出力を返します。# キュー全体を確認する # postqueue -p -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- A1B2C3D4E* 412 Mon Apr 7 10:15:00 root@example.local user@example.com -- 1 Kbytes in 1 Request. # 別表記でも同じ結果が出る # mailq
* は active キュー(配送試行中)、! は hold(保留)、何もない場合は deferred(再送待ち)を表します。テスト用に送ったメールが deferred のまま残っている場合は、宛先・名前解決・SMTP接続のいずれかに問題が起きているサインです。2. 配送ステータス別の本数を一発で集計する
キューが大量に溜まるとpostqueue -pでは把握しきれません。ステータス別の本数を集計するには postqueue -j(JSON出力)とjqを組み合わせます。# JSON出力でステータス別件数を集計する(Postfix 3.1+) # postqueue -j | jq -r '.queue_name' | sort | uniq -c 12 active 348 deferred 2 hold
3. テスト後の不要メールをキューから削除する
テストで残ったメールはpostsuper -d で安全に削除できます。本番環境では事前にキュー内容を控えてから実行してください。# 特定の Queue ID を削除する # postsuper -d A1B2C3D4E # キュー全体を一括削除する(テスト直後の片付け用) # postsuper -d ALL # deferred キューだけ一括削除する # postsuper -d ALL deferred
4. キューを強制的に再送する
deferred キューの中身を「いますぐ送り直したい」場合はpostqueue -f でフラッシュ(即時再送試行)が可能です。# キュー全体を即時再送試行する # postqueue -f # 特定宛先ドメインだけ再送する # postqueue -s example.com
postqueue -fはメンテナンス直後にだけ使い、平時に多用するとPostfix本来の再送間隔ロジックを壊すので注意してください。テスト時にハマりやすい設定とログの読み解き早見表
mailコマンドで「送信したのに届かない」とき、main.cfのチェック箇所とmaillogのキーワードがおおよそ決まっています。実務で使う対応関係をまとめます。| 症状(maillog のキーワード) | 原因の見当 | 確認すべき main.cf 設定 |
|---|---|---|
Relay access denied |
許可されていないIPからの送信 | mynetworks / smtpd_recipient_restrictions |
Host or domain name not found |
DNS解決失敗(MX/Aレコードが引けない) | /etc/resolv.conf / nslookup で確認 |
Connection timed out |
送信先25番ポートに到達できない | iptables / firewalld / クラウドSG設定 |
Message size exceeds limit |
メールサイズ上限超過 | message_size_limit |
Recipient address rejected |
宛先がローカル/バーチャルどちらにも存在しない | virtual_alias_maps / local_recipient_maps |
queue file write error |
キューディレクトリの権限/ディスク満杯 | /var/spool/postfix/の権限・容量 |
mailコマンドだけで原因が見えにくいときは、
maillogから上の表のキーワードを grep するのが最短です。maillog から該当行だけ抜き出す例
# Relay access denied 系のエラーだけ抽出する # grep -E "Relay access denied|access denied" /var/log/maillog # DNS解決失敗を抽出する # grep "Host or domain name not found" /var/log/maillog # 過去24時間の bounce ログだけ抽出する(journalctl版) # journalctl -u postfix --since "24 hours ago" | grep -E "bounce|deferred|rejected"
Postfixだけでなく、サーバー全体を体系的に学びませんか?
メールサーバーの構築・運用は、Linuxサーバー管理のスキルの総合力が問われます。
ネットの断片的な情報に頼るのではなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:yumにリポジトリを追加・変更する方法|EPELの設定とyum.repos.dの書き方
- 前のページへ:CentOS7.1のダウンロード
- この記事の属するカテゴリ:Linuxサーバー構築へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます