Postfixでメールを送信する方法

Postfixでメールを送信

Postfixでメールを送信する方法を解説

PostfixをインストールしてSMTPサーバを構築したら、次は実際にメールを送信できるか確認する必要があります。

メールサーバ構築では「Postfixが起動していること」と「実際にメールが送信できること」は別問題です。

SMTPサーバが正常に動作していても、DNS設定やリレー設定、認証設定などの問題によってメール送信に失敗することがあります。

そのため構築後には必ずメール送信テストを実施します。

本記事ではPostfixを利用してメールを送信する方法や確認手順、トラブルシューティングについて解説します。

メール送信の仕組み

まずはPostfixによるメール送信の流れを確認しましょう。

ユーザー
   ↓
mailコマンド
   ↓
Postfix
   ↓
DNS(MX検索)
   ↓
相手SMTPサーバ
   ↓
受信者

Postfixはメールを受け取ると、DNSへ問い合わせを行い、配送先メールサーバを特定して配送を実施します。

Postfixが起動しているか確認する

まずはPostfixサービスが起動していることを確認します。

# systemctl status postfix

正常な場合は以下のように表示されます。
active (running)

停止している場合は起動します。
# systemctl start postfix

自動起動設定も行っておきます。
#systemctl enable postfix

mailxをインストールする

Linuxから簡単にメール送信を行うためにmailxを利用します。

AlmaLinuxやRocky Linuxでは以下でインストールできます。

# dnf install -y mailx

環境によってはmailxの代わりにmailコマンドとして提供されています。

最も簡単なメール送信方法

件名付きでメールを送信する例です。

# echo "Test Mail" | mail -s "Postfix Test" user@example.com

これだけでメール送信が実行されます。

送信後はメールキューやログを確認します。

本文をファイルから送信する

テキストファイルをメール本文として送信することも可能です。

# mail -s "Daily Report" user@example.com < report.txt

スクリプトからメール通知を行う際によく利用されます。

複数行のメールを送信する

ヒアドキュメントを利用する方法です。

# mail -s "Test Mail" user@example.com << EOF
Hello

This is Postfix test mail.

EOF

シェルスクリプトでも利用しやすい方法です。

root宛メールを送信する

ローカルユーザーへ送信することもできます。

# echo "Hello" | mail -s "Local Test" root

ローカル配送が正常に動作しているか確認できます。

メールは通常以下へ保存されます。

/var/mail/root

mailコマンドでメールを確認する

ローカルメールはmailコマンドで確認できます。

mail

受信メール一覧が表示されます。

Linuxサーバ構築の学習ではよく利用されます。

sendmailコマンドを利用する方法

Postfixはsendmail互換インターフェースを提供しています。

以下のように利用できます。

# sendmail user@example.com

その後メール内容を入力します。

Subject: Test Mail

Hello World
.

最後の「.」でメール送信されます。

SMTP通信で直接送信する方法

SMTP通信を直接確認する場合はtelnetを利用します。

# telnet localhost 25

接続後にSMTPコマンドを入力します。

EHLO localhost

MAIL FROM:

RCPT TO:

DATA

Subject: Test

Hello

.

QUIT

SMTP通信の学習に役立ちます。

メールキューを確認する

送信したメールは一時的にメールキューへ格納されます。

確認コマンドです。

# mailq

または
# postqueue -p

正常に配送された場合はキューに残りません。

配送ログを確認する

メール送信時はログ確認が非常に重要です。

リアルタイムで確認する場合です。

# tail -f /var/log/maillog

systemd環境では以下も利用できます。
# journalctl -u postfix -f

メール配送状況を詳細に確認できます。

正常な送信ログ例

正常配送時には以下のようなログが出力されます。

status=sent

例です。
to=,
relay=mail.example.com,
status=sent

status=sentが表示されれば配送成功です。

DNSが重要な理由

外部ドメインへメールを送信する場合、PostfixはDNSを利用します。

MXレコードを検索して配送先メールサーバを特定します。

DNS設定が誤っていると送信に失敗します。

名前解決確認にはdigコマンドを利用します。

# dig MX gmail.com

メール配送ではDNSが不可欠です。

Gmailへ送信する場合の注意点

現在の主要メールサービスはスパム対策が非常に厳しくなっています。

以下が未設定の場合、配送拒否されることがあります。

  • 正引きDNS
  • 逆引きDNS
  • SPF
  • DKIM
  • DMARC

検証環境ではメールが迷惑メールフォルダへ入ることもあります。

よくある送信エラー

Host not found

Host not found

DNS設定に問題があります。

Connection refused

Connection refused

相手SMTPサーバへ接続できません。

Relay access denied

Relay access denied

SMTPリレーが許可されていません。

Authentication failed

Authentication failed

SMTP認証エラーです。

Postfixから外部SMTPサーバを経由する

自サーバから直接送信せず、別のSMTPサーバを利用することもあります。

relayhostを設定します。

relayhost = [smtp.example.com]:587

Google WorkspaceやMicrosoft 365経由で送信する際に利用されます。

メール送信テストのポイント

構築後は以下の順番で確認すると効率的です。

  1. ローカル配送確認
  2. mailコマンド確認
  3. メールキュー確認
  4. ログ確認
  5. 外部メール送信確認
  6. Gmail送信確認

この流れで切り分けを行うと問題箇所を特定しやすくなります。

監視通知での利用例

Postfixは監視システムでもよく利用されます。

例えばディスク容量警告メールです。

# echo "Disk Usage Warning" | mail -s "Alert" admin@example.com

NagiosやZabbixなどでも同様の仕組みが利用されています。

まとめ

Postfixではmailコマンドやsendmailコマンドを利用してメール送信が可能です。

メール送信後はmailqやログを確認し、正常に配送されたかを確認します。

外部メール送信ではDNS設定やSPF、DKIMなども重要になります。

メールサーバ構築後はローカル配送から外部配送まで順番に確認することで、効率よく動作検証を行うことができます。