PostfixでSMTPメール送信をテストする方法|mailコマンド・telnet・ログ確認まで

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxサーバー構築 > PostfixでSMTPメール送信をテストする方法|mailコマンド・telnet・ログ確認まで

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

テストの前に——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

「Active: active (running)」と表示されれば、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))

`master` プロセスが 25番ポートを待ち受けていればOKです。

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

「Mail queue is empty」と表示されれば、送信は完了しています。
キューにメールが残っている場合は、配送に問題が発生しています。後述の「ログ確認」で原因を特定してください。

3. ローカル配送テスト(root宛)

まず外部に送る前に、ローカル(サーバー自身)に送れるか確認するのが安全です。

# root宛てにテストメールを送る # echo "ローカル配送テスト" | mail -s "Local Test" root # rootのメールボックスを確認する # mail -u root # または # cat /var/spool/mail/root

ローカル配送が成功すれば、Postfix自体は正常に動いています。
外部への送信が失敗する場合は、ネットワーク・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 が返れば接続成功。次のコマンドを入力する

「220」はSMTPのサービス準備完了を示すレスポンスコードです。
接続できない場合(「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

このエラーは、Postfixが設定していないドメインへのリレーを拒否しているサインです。
自分のドメイン宛には送れるが、外部ドメイン宛に送れない場合は、送信元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

「status=sent」と表示されていれば送信成功です。
最後の行の「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=」の値でエラーの種類が分かります。注意が必要なのは、dsn=4.x.xは自動再試行されますが、ディスク容量の逼迫や長期間の滞留が発生すると正常メールにも影響するため放置は禁物です。

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

swaksはSMTPのやり取りをリアルタイムで表示してくれるため、どのステップで問題が起きているかがmailコマンドより格段に見やすいです。
本番環境のメールサーバー設定確認には、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

`sendmail.postfix` になっていれば、mailコマンドはPostfix経由で送信しています。
別の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 リアルタイムログ監視
テスト送信でうまくいかない場合は「mailコマンドで送信→キュー確認→ログ確認」の順で調べると原因を絞り込めます。
telnetによるSMTP直接対話は一手間かかりますが、エラーがどのSMTPコマンドで発生しているかが明確になるため、複雑なトラブルの切り分けに非常に有効です。

postqueue / mailq / postsuper でテスト後のメールキューを管理する

テスト送信を繰り返していると、配送に失敗したメールがキューに溜まったままになるケースがあります。postqueuemailqpostsuper を使ってキュー状態を確認し、不要なメールを削除する手順を整理します。

1. キューに溜まったメールを確認する

まずはキューの中身を確認してください。postqueue -pmailqは同じ出力を返します。

# キュー全体を確認する # 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

「Queue ID」末尾の * は 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

deferred が多い場合は再送待ち、active が常に多いなら配送先サーバの応答が遅い可能性があります。

3. テスト後の不要メールをキューから削除する

テストで残ったメールは postsuper -d で安全に削除できます。本番環境では事前にキュー内容を控えてから実行してください。

# 特定の Queue ID を削除する # postsuper -d A1B2C3D4E # キュー全体を一括削除する(テスト直後の片付け用) # postsuper -d ALL # deferred キューだけ一括削除する # postsuper -d ALL deferred

「postsuper: A1B2C3D4E: removed」と表示されれば削除完了です。

4. キューを強制的に再送する

deferred キューの中身を「いますぐ送り直したい」場合は postqueue -f でフラッシュ(即時再送試行)が可能です。

# キュー全体を即時再送試行する # postqueue -f # 特定宛先ドメインだけ再送する # postqueue -s example.com

DNSやネットワーク復旧後の動作確認に重宝します。なお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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。