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 postfixmailxをインストールする
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/rootmailコマンドでメールを確認する
ローカルメールは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
.
QUITSMTP通信の学習に役立ちます。
メールキューを確認する
送信したメールは一時的にメールキューへ格納されます。
確認コマンドです。
# mailq
または
# postqueue -p正常に配送された場合はキューに残りません。
配送ログを確認する
メール送信時はログ確認が非常に重要です。
リアルタイムで確認する場合です。
# tail -f /var/log/maillog
systemd環境では以下も利用できます。
# journalctl -u postfix -fメール配送状況を詳細に確認できます。
正常な送信ログ例
正常配送時には以下のようなログが出力されます。
status=sent
例です。
to=,
relay=mail.example.com,
status=sentstatus=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経由で送信する際に利用されます。
メール送信テストのポイント
構築後は以下の順番で確認すると効率的です。
- ローカル配送確認
- mailコマンド確認
- メールキュー確認
- ログ確認
- 外部メール送信確認
- Gmail送信確認
この流れで切り分けを行うと問題箇所を特定しやすくなります。
監視通知での利用例
Postfixは監視システムでもよく利用されます。
例えばディスク容量警告メールです。
# echo "Disk Usage Warning" | mail -s "Alert" admin@example.comNagiosやZabbixなどでも同様の仕組みが利用されています。
まとめ
Postfixではmailコマンドやsendmailコマンドを利用してメール送信が可能です。
メール送信後はmailqやログを確認し、正常に配送されたかを確認します。
外部メール送信ではDNS設定やSPF、DKIMなども重要になります。
メールサーバ構築後はローカル配送から外部配送まで順番に確認することで、効率よく動作検証を行うことができます。





