SMTP拡張サービス

SMTPサービスは、以下の2種類に分類される。

あるサーバで、どのSMTP拡張サービスが利用できるかどうかは、 EHLOコマンドで知ることができる。 ここに、一般的に知られている拡張サービスを挙げる。

注意:標準でない、自分の環境だけで使われるような拡張サービスには、Xで 始まる名前をつける。逆に、標準にはXで始まる名前の拡張サービス名がつけ られることはない。

もくじ


リファレンス

認証と暗号

Authentication - SMTP接続の認証を行う

EHLOキーワードAUTH
追加コマンド名AUTH
MAILコマンドへの追加オプションAUTH
RCPTコマンドへの追加オプションなし
定義RFC 2554

これにより、AUTHコマンドを用いて SMTPサーバがクライアントを認証できるようになる。SMTPという よりむしろMessage Submission(RFC 2476)での利 用に向いているようだ。これが普及すれば、POP before SMTPを駆逐できるだ ろう。

MAILコマンドのAUTHパラメータは、そのメッセー ジがこの機構で認証済みであることを示す(つまり、信用できるシステム間で の利用に限定される)。


STARTTLS - TLSで通信する

EHLOキーワードSTARTTLS
追加コマンド名STARTTLS
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 2487

これにより、SMTPクライアントとSMTPサーバとの間の通信がTLSによって暗号 化される。ただし、あくまでサーバ間であって、これだけでend-to-end通信が 安全になるわけではないので注意。


MIME関連

8bit-MIMEtransport - 8bitのMIMEメッセージを転送する

EHLOキーワード8BITMIME
追加コマンド名なし
MAILコマンドへの追加オプションBODY
RCPTコマンドへの追加オプションなし
定義RFC 1652

この拡張により、RFC 821で規定された7ビット列でなく、8ビットをフルに利 用したMIMEメッセージが送信できるようになる。

これを利用する際には、MAILコマンドに

MAIL FROM: <s-v@puni.net> BODY=8BITMIME

のように、BODYオプションを用いる。なお、7ビット転送を明示的に表わすに は、MAILコマンドのオプションとして「BODY=7BIT」を用いる。


CHUNKING - 「Chunk」なデータを転送する

EHLOキーワードCHUNKING
追加コマンド名BDAT
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 3030

この拡張により、大きなメッセージを(連続でなく)分割して送ることができる ようになる。つまり、例えば10MBのファイルを1MBずつ、 BDATコマンドで送信できる。

実際には、BINARYMIME拡張と併用してバイナリを 送信するのに用いることが多くなるだろう。


BINARYMIME - バイナリのMIMEメッセージを転送する

EHLOキーワードBINARYMIME
追加コマンド名なし
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 3030

この拡張により、バイナリを直接、SMTP転送することができる。これを利用す るためには、MAILコマンドに 「BODY=BINARYMIME」というオプションを付ける必要がある。

なお、この拡張はCHUNKING拡張と共にしか利用でき ず、またデータ転送にはBDAT(DATAではなく)を利用することになる。


配送状況などに関するもの

Deliver By - 配送に制限時間を設ける

EHLOキーワードDELIVERBY
追加コマンド名なし
MAILコマンドへの追加オプションBY
RCPTコマンドへの追加オプションなし
定義RFC 2852

この拡張により、メッセージをある一定時間内に相手ユーザのメールボックス へと送ることができるようになる。ただし、この指定がなされたメッセージに 対し、SMTPサーバが配送を早くするための特別な扱いをするわけではなく、単 に指定された時間を過ぎたらエラーになる、ということである。なお、値は9 桁以内の数字(正、負両方)であり、単位は秒である。

EHLO応答で DELIVERBY 60 のようにパラメータが与えられることがあり、その 場合は、サーバ側で可能な最小時間を示す。

クライアントから利用する場合、MAILコマンド へのパラメータ「BY」を用いる。ここでの指定は「BY=x;y」の形式になる。 なお、これらの通知はDSNによる。

xこの時間内(単位:秒)に配送しなさい
yN指定時間内に配送できなかったらその旨の連絡が来る
R指定時間内に配送できなかったらエラーで返す
TTrace:リレーされたらその度にDSNが返る


Delivery Status Notification - 配送状況に関する通知

EHLOキーワードDSN
追加コマンド名なし
MAILコマンドへの追加オプションENVID, RET
RCPTコマンドへの追加オプションNOTIFY, ORCPT
定義RFC 1891

送り主が配送状況を知ることができるような仕組みで、例えばエラーメールの ようなものに関する規格。特に、「エラーを受けとってもそのメールが誰にあて たものかわからない」ということがままあるが、DSNではそれへの対策がなさ れている。また、「配送が成功したことを知りたい」という要求も受けつけら れる。この拡張により、以下の4つのオプションが利用可能になる。

RCPTへのオプション

NOTIFY
メールが配達されたり、配達できなかったりしたときにDSNを返すよう、 SMTPサーバに要求する。以下のいずれか(複数でも可で、その場合には「,」で 区切る)のパラメータをとる。
NEVERこれを指定すると、DSN(エラーメール)は返ってこない。
SUCCESS配送成功時にDSNが返る
FAILURE配送失敗時にDSNが返る
DELAY配送遅延時にDSNを返す(逆に、このオプションがないなら 配送が遅延したときに遅延に関するDSNを発行されないかもしれない)

なお、DSNをサポートしないSMTPサーバでは、「NOTIFY=FAILURE」ないし 「NOTIFY=FAILURE,DELAY」として実装される。 また、1つのRCPTに対して複数のNOTIFYを置くことはできない (
501応答になる)。

DSNを送信する場合には、「NOTIFY=NEVER」としなければならない(メールルー プを防ぐため)。

ORCPT
そのメールのそもそもの送り先を示す。 メールが転送され、実際の送り先でエラーが起きたとき、そのエラーを見て送 り主は誰あてのメールかわからなくなる場合があるが、ORCPTがあればその心 配はない(メーリングリストで便利)。例えば、もともとは <mimori@puni.net> 宛てのメールだがpuni.netサーバで <mimori@iyadesu.org> へと転送されるような場合、iyadesu.orgへの ESMTPセッションで
RCPT TO: <mimori@iyadesu.org> ORCPT=rfc822;mimori@puni.net
のようにする(rfc822とあるのは、このアドレスがrfc822形式だからである)。 なお、1つのRCPTに対して複数のORCPTを置くことはできない (501応答になる)。

MAILへのオプション

RET
DSNにおいて、ヘッダだけを返すかボディも返すかを指定する。
FULLDSN(エラーメール)に、元メール全体(メールボディを含む) が返る
HDRSDSN(エラーメール)に、元メールのヘッダのみが返る

なお、指定がない場合はサーバのポリシーによっていずれもあり得る。

ENVID
送信したとき、そのエンベロープにしるしをつける

これにより、100文字以内でそのメールに印をつけることができる。後でDSNが 戻ってきたとき、その値を見ればいつ、誰に向けて送信したメールなのかを知 ることができるだろう。


ターミナルへの出力に関するもの

Send - メッセージをターミナルに送る

EHLOキーワードSEND
追加コマンド名SEND
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 821

この拡張により、SENDコマンドが使える。 ただし、現在のメールの利用方法(POPないしIMAPでメールを取得するのが普通) からすると、メッセージを直接ターミナルへ送るというのはややナンセンスか もしれない。


Send or Mail - メッセージをターミナルかメールボックスに送る

EHLOキーワードSOML
追加コマンド名SOML
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 821

この拡張により、SOMLコマンドが使える。 ただし、現在のメールの利用方法(POPないしIMAPでメールを取得するのが普通) からすると、メッセージを直接ターミナルへ送るというのはややナンセンスか もしれない。


Send and Mail - メッセージをターミナルとメールボックスに送る

EHLOキーワードSAML
追加コマンド名SAML
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 821

この拡張により、SAMLコマンドが使える。 ただし、現在のメールの利用方法(POPないしIMAPでメールを取得するのが普通) からすると、メッセージを直接ターミナルへ送るというのはややナンセンスか もしれない。


その他

Expand - メーリングリストアドレスの展開

EHLOキーワードEXPN
追加コマンド名EXPN
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 821

この拡張により、EXPNコマンドが利用でき るようになり、メーリングリストアドレスが展開できるようになる。RFC 2821 では実装するべき(SHOULD)となってはいるが、一方で利用できないような設定 をしてもよい、とも書かれている。spam送信のためのアドレスリストとして使 われてしまうことが多いので、実際にこのコマンドを利用できないようにして いるサーバは多い。


Help - SMTPコマンドのヘルプ

EHLOキーワードHELP
追加コマンド名HELP
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 821

この拡張により、HELPコマンドが利用できるよ うになる。特に人間がtelnetなどで接続してDEBUGしたりするのに有用だろう。


Turn - クライアントとサーバを入れ替える

EHLOキーワードTURN
追加コマンド名TURN
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 821

この拡張がある時、TURNコマンドを送信すると、 あたかも逆向きのSMTP接続をしたかのように、クライアントがサーバに、サー バがクライアントになる。

ただし、これはセキュリティ上問題になり得るため、安全な環境以外では利用 すべきでない。


Remote Queue Processing Declaration - リモートのキューを処理する

EHLOキーワードETRN
追加コマンド名ETRN
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 1985

この拡張により、サーバからクライアントに(逆向きに)メールを転送する。 TURNに近いが、サーバがクライアントを認証するのがこ となっている。


On-Demand Mail Relay - クライアントの要求によるメールリレー

EHLOキーワードATRN
追加コマンド名ATRN
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 2645

AUTHで認証されたTurn。 これを利用するにはまずAUTHで認証しなければ ならない。その上でATRNとするとサーバとクラ イアントがいれかわる。


Pipelining - 複数のSMTPコマンドをパイプラインにする

EHLOキーワードPIPELINING
追加コマンド名なし
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 2920

この拡張があると、SMTPコマンドを送信してサーバからの応答が返るのをを待 たずに次のコマンドを送信しても、正しく処理される。RSET, MAIL, SEND, SOML, SAML, RCPTについては問題ない。それら以外(例えばDATA)については、 送信はしてよいが、その次のコマンドを送信する前にその処理が終わるのを待 たなければならない。


Message Size Declaration - メッセージのサイズを宣言し、また制限す る

EHLOキーワードSIZE
追加コマンド名なし
MAILコマンドへの追加オプションSIZE
RCPTコマンドへの追加オプションなし
定義RFC 1870

メッセージのサイズに関する拡張。 サーバは、 EHLOへの応答にSIZE=xxxx を含めることで、そ のサーバが扱えるメッセージの最大の大きさ(単位はオクテット)をクライアン トに通知する。例えば、

250 SIZE=1000000

がEHLO応答にあれば、このサーバで扱えるメッセージの最大長は1000000バイ ト(つまり1MB)ということになる。

一方、クライアントは MAILコマンドへのオプションにSIZEを含めるこ とで、実際にデータを転送することなく、サーバにメッセージサイズを通知で きる。例えば、

MAIL FROM: <s-v@puni.net> SIZE=100000

という MAIL コマンドを送信すると、サーバはそのメッセージが100000バイト(100kB)であ ると認識する(ただし、このMAILコマンドにあらわれる値と異なるサイズのメッ セージを送信したとしても、サーバはそれを受けとる)。

エラーとしては、452552が一般的である。


Enhanced-Status-Codes - 拡張ステータスコードを利用する

EHLOキーワードENHANCEDSTATUSCODES
追加コマンド名なし
MAILコマンドへの追加オプションなし
RCPTコマンドへの追加オプションなし
定義RFC 2034

これにより、サーバから拡張ステータスコード(RFC 1893) が送信される。


Mimori Yuki <mimori@puni.net>
$Id: service.html,v 1.7 2003/06/07 16:43:47 s-v Exp $