UNIX/Linuxの部屋 sendmailコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド sendmail メール管理デーモン・メール送信プログラム このエントリーをはてなブックマークに追加

sendmail は最も有名な MTA (Mail Transfer Agent) で、メールの送信・中継・受信を管理する。1979年から存在し、今は廃れてしまった様々な機能 (例えば UUCP でのメール送信など) の機能を現在でも有するため、複雑かつわかりづらい面がある。
sendmail コマンドはデーモンとして常駐するが、メール送信アプリケーション (MUA) としての機能も持つ。



sendmail コマンドの使い方
sendmail コマンドにて foo@example.com 宛にメールを送りたい場合、
% sendmail foo@example.com
From: my@mail.address (あなたのメールアドレス)
To: foo@example.com
Subject: This is test mail.
(ここに空行を入れる。ここまでがヘッダ。ここから先がボディ)
メールの内容
.(ドットのみの行を入力すると終了)
となる。ドットのみの行を入力すると終了してしまうので、本当に「.」のみの行を送りたいときは -i オプションを使うとよい。

宛先である foo@example.com を、sendmail の引数と、To: フィールドの両方に書いていることに注意してほしい。この場合、本当にメールが送信されるのは、引数で示した方のメールアドレスであり、To: foo@example.com は実際の宛先とは一切関係ない。すなわち
% sendmail foo@example.com
To: hogehoge@fugafuga (foo@example.comとは全く関係ないメールアドレス)
としてもよいし、From: フィールドも、送信者のメールアドレスを書く必要はない。
ただし、他のヘッダに誰が送ったか書き込まれるので、いたずらメールを送ろうなどと考えないこと。

sendmail コマンドのオプション
-i 「.」のみの行を送っても、ボディの終了とみなさないようにする。
この場合、ファイルに送信したい内容を書いて
% sendmail foo@example.com < file
とするか、Ctrl-D で EOF を送るとよい。
-t To: Cc: Bcc: フィールドを認識する。
先に書いたように、sendmail はデフォルトでは To: Cc: Bcc: などのフィールドを無視し、コマンドラインで指定されたメールアドレスのみにメールを送信するが、-t オプションを付けると、To: Cc: Bcc: フィールドを解析し、各フィールドで指定されたメールアドレスにメールを送信する。-t オプションを付けた場合、コマンドラインで送信先メールアドレスを指定する必要はない。

SMTP でのメール送信
mail.example.com で動いている SMTP サーバ経由でメールを送る場合は
% telnet mail.example.com smtp
HELO あなたのドメイン名
MAIL FROM: あなたのメールアドレス
RCPT TO: 送信先のメールアドレス
DATA (ここまでがエンベロープ。ここから先がヘッダ)
From: 送信元メールアドレス
To: 送信先メールアドレス
Subject: タイトル
(空行。ここから先がボディ)
メールの内容
.(ドットのみの行はボディの終了を示す)
QUIT
とすればよい。なお、これは SMTP プロトコルの例であって、sendmail に限ったことではない。相手側は sendmail でも Postfix でも qmail でも同じである。

sendmail のバージョン確認方法
sendmail のバージョンを確認する方法はなかなか変態的で、-d0.101 というオプションを指定する。
% sendmail -d0.101
Version 8.15.2
Sendmail 8.8 以前であれば下記のようにする。
% sendmail -d0.1

コマンドではなく、SMTP サーバのバージョンを確認したい場合は下記のように telnet コマンドで接続すればよい。ただし、アプリケーション名やバージョンを隠している場合もあるので、確実な方法ではない。
% telnet localhost smtp
(略)
220 localhost ESMTP Sendmail 8.15.2/8.15.2; Fri, 9 Nov 2018 14:55:15 +0900 (JST)

その他
sendmail の実行ファイルはおおむね /usr/sbin にあるが、/usr/lib にある UNIX もあるので注意。

関連コマンド
>> FreeBSDオンラインマニュアル(man) FreeBSD sendmail(8)