sendmail はメール本文(RFC 5322 形式)を標準入力から受け取り、ローカルの MTA(Sendmail 本体や Postfix/OpenSMTPD などの互換実装)に**投入(enqueue)**します。多くの UNIX/Linux では /usr/sbin/sendmail が用意され、スクリプトやシステム通知の送信に使われます。(man7.org, Postfix)
実務では「cronの結果を送る」「アプリの通知メールを送る」「サーバ内のジョブから運用メールを発報する」などで利用します。(Nextcloud)
構文(Syntax)
# 宛先を引数で指定
sendmail [OPTIONS] RECIPIENT...
# ヘッダの To:/Cc:/Bcc: から宛先を読む(-t)
sendmail -t [OPTIONS]
# 代表的なオプションの書式
# 送信者名/アドレス、詳細表示など
sendmail -F "FULL NAME" -f [email protected] -v -t
-tを付けると本文のTo:/Cc:/Bcc:から宛先を抽出(Bcc:は送信時に削除)します。引数での宛先指定は不要です。(man7.org)
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-t | To:/Cc:/Bcc: を読んで宛先を決定(Bcc: は削除) | printf "Subject: test\nTo: [email protected]\n\nHi\n" | sendmail -t (man7.org) |
-f ADDRESS | エンベロープ送信者(Return-Path)を設定(実装により制限あり) | ... | sendmail -t -f [email protected] (man7.org, Polarhome) |
-F NAME | 送信者のフルネーム(ヘッダの表示名)を設定 | ... | sendmail -t -F "CI Bot" (man7.org) |
-v | 詳細ログを表示(やり取りを表示) | ... | sendmail -t -v (man7.org) |
-i / -oi | 行頭に単独の . があっても終端とみなさない(SMTP互換のドットエスケープを無効化) | ... | sendmail -t -oi (Polarhome, OSR507 Documentation) |
-Am / -Ac | sendmail.cf(MTA)/ submit.cf(クライアント投入用)を選択 | sendmail -Ac -t ... (Oracle Docs) |
-q[INTERVAL] | キュー処理を行う(-q15m で15分ごとに処理等) | sendmail -q15m (linuxfromscratch.org) |
| 互換実装の注意 | Postfix/OpenSMTPD などの sendmail 互換は、上記の一部のみサポート(未対応は黙殺) | (例) Postfix 互換 sendmail(1) (Postfix) |
※ 実装差:OpenSMTPD/Postfix 互換の
sendmailは最低限の-t/-f/-F/-vを提供し、他フラグは無視される場合があります。(man7.org, Postfix)
実行例
1) ヘッダに宛先を書いて送る(最小構成)
説明: -t でヘッダから宛先を読む基本形。
コマンド:
printf "Subject: Hello\nTo: [email protected]\n\nThis is a test.\n" | sendmail -t
ポイント: Bcc: があっても送信時にヘッダから除去されます。(man7.org)
2) 宛先を引数で指定して送る(-t を使わない)
説明: ヘッダに To: を書かず、引数で宛先を渡す。
コマンド:
printf "Subject: Hi\n\nBody\n" | sendmail -v [email protected] [email protected]
ポイント: -t を付けない場合は少なくとも1件の宛先引数が必要です。(man7.org)
3) 送信者名・エンベロープ送信者を指定
説明: 差出人名と Return-Path を指定して送る(アプリ通知など)。
コマンド:
printf "Subject: Report\nTo: [email protected]\n\nDone.\n" \
| sendmail -t -F "CI Bot" -f [email protected]
注意: -f は MTA 側の「信頼ユーザ」設定などで制限される場合があります。(Polarhome)
4) ドットのみ行を含む本文を安全に送る(-oi)
説明: SMTP では単独の . 行が終端扱い。ログ等をそのまま送るなら -oi を付与。
コマンド:
some_command | sendmail -t -oi <<'EOF'
Subject: log
To: [email protected]
...(ログの中に単独の . 行があってもOK)
EOF
背景: -oi/-i は単独ドット行での終端を無効化します。(Polarhome)
5) エラー例:-t なのにヘッダに宛先がない
説明: To:/Cc:/Bcc: が無いと「宛先が見つからない」エラー。
コマンド:
printf "Subject: NoTo\n\nBody\n" | sendmail -t
出力例(代表例):
No recipient addresses found in message header
(To: を追加するか、-t を外して宛先を引数で渡してください) (lists.archlinux.org)
関連コマンド
mail/mailx:ユーザ向けのメール送信/閲覧フロントエンド。内部でsendmailを呼ぶことが多い。(Linux Command Library)mailq/postqueue:メールキューを表示。(Oracle Docs)newaliases:/etc/aliasesの再構築。postfix/smtpd/dma:別実装の MTA(いずれもsendmail互換の投入コマンドを提供)。(Postfix, man7.org, Debian Manpages)
備考
- 実装差(重要): 多くのシステムで
/usr/sbin/sendmailは「互換インターフェース」です。Postfix/OpenSMTPD では未対応のフラグが黙って無視される場合があります。移植性を重視するなら-t/-f/-F/-v程度に留め、詳細な制御は MTA 側設定で行うのが安全です。(Postfix, man7.org) - 設定ファイルとの関係: 伝統的な
sendmail.cfは直接編集せず、sendmail.mcから生成します。8.12以降は投稿専用のsubmit.cfが導入され、一般ユーザーはこれを使って安全に投入できます。(Oracle Docs) - Bcc の扱い:
-t使用時、Bcc:ヘッダは送信前に削除されます(受信者に Bcc が露出しない)。(man7.org) - 権限と制限:
-fで任意の送信者を名乗るのは MTA 設定で制限されることがあります(「信頼ユーザ」概念など)。(Polarhome) - 互換ラッパと切替: BSD 系では
mailwrapper/mailer.confによりsendmail互換コマンドの実体を切替可能です。(Socsvn)
参考
- manページ(OpenSMTPD 互換
sendmail(8)):(man7.org) - Postfix の互換
sendmail(1):(Postfix) - Sendmail(Oracle ドキュメント・コマンドライン引数/設定):(Oracle Docs)
- Red Hat Deployment Guide(Sendmail 概要):(Red Hat Docs)
- mailwrapper / mailer.conf(MTA 切替の仕組み):(Socsvn)

コメント