コマンド
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 以前であれば下記のようにする。
コマンドではなく、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 もあるので注意。