SMTPサービスは、以下の2種類に分類される。
あるサーバで、どのSMTP拡張サービスが利用できるかどうかは、 EHLOコマンドで知ることができる。 ここに、一般的に知られている拡張サービスを挙げる。
注意:標準でない、自分の環境だけで使われるような拡張サービスには、Xで 始まる名前をつける。逆に、標準にはXで始まる名前の拡張サービス名がつけ られることはない。
EHLOキーワード | AUTH |
追加コマンド名 | AUTH |
MAILコマンドへの追加オプション | AUTH |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 2554 |
これにより、AUTHコマンドを用いて SMTPサーバがクライアントを認証できるようになる。SMTPという よりむしろMessage Submission(RFC 2476)での利 用に向いているようだ。これが普及すれば、POP before SMTPを駆逐できるだ ろう。
MAILコマンドのAUTHパラメータは、そのメッセー ジがこの機構で認証済みであることを示す(つまり、信用できるシステム間で の利用に限定される)。
EHLOキーワード | STARTTLS |
追加コマンド名 | STARTTLS |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 2487 |
これにより、SMTPクライアントとSMTPサーバとの間の通信がTLSによって暗号 化される。ただし、あくまでサーバ間であって、これだけでend-to-end通信が 安全になるわけではないので注意。
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」を用いる。
EHLOキーワード | CHUNKING |
追加コマンド名 | BDAT |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 3030 |
この拡張により、大きなメッセージを(連続でなく)分割して送ることができる ようになる。つまり、例えば10MBのファイルを1MBずつ、 BDATコマンドで送信できる。
実際には、BINARYMIME拡張と併用してバイナリを 送信するのに用いることが多くなるだろう。
EHLOキーワード | BINARYMIME |
追加コマンド名 | なし |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 3030 |
この拡張により、バイナリを直接、SMTP転送することができる。これを利用す るためには、MAILコマンドに 「BODY=BINARYMIME」というオプションを付ける必要がある。
なお、この拡張はCHUNKING拡張と共にしか利用でき ず、またデータ転送にはBDAT(DATAではなく)を利用することになる。
EHLOキーワード | DELIVERBY |
追加コマンド名 | なし |
MAILコマンドへの追加オプション | BY |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 2852 |
この拡張により、メッセージをある一定時間内に相手ユーザのメールボックス へと送ることができるようになる。ただし、この指定がなされたメッセージに 対し、SMTPサーバが配送を早くするための特別な扱いをするわけではなく、単 に指定された時間を過ぎたらエラーになる、ということである。なお、値は9 桁以内の数字(正、負両方)であり、単位は秒である。
EHLO応答で DELIVERBY 60 のようにパラメータが与えられることがあり、その 場合は、サーバ側で可能な最小時間を示す。
クライアントから利用する場合、MAILコマンド へのパラメータ「BY」を用いる。ここでの指定は「BY=x;y」の形式になる。 なお、これらの通知はDSNによる。
x | この時間内(単位:秒)に配送しなさい | |
y | N | 指定時間内に配送できなかったらその旨の連絡が来る |
R | 指定時間内に配送できなかったらエラーで返す | |
T | Trace:リレーされたらその度にDSNが返る |
EHLOキーワード | DSN |
追加コマンド名 | なし |
MAILコマンドへの追加オプション | ENVID, RET |
RCPTコマンドへの追加オプション | NOTIFY, ORCPT |
定義 | RFC 1891 |
送り主が配送状況を知ることができるような仕組みで、例えばエラーメールの ようなものに関する規格。特に、「エラーを受けとってもそのメールが誰にあて たものかわからない」ということがままあるが、DSNではそれへの対策がなさ れている。また、「配送が成功したことを知りたい」という要求も受けつけら れる。この拡張により、以下の4つのオプションが利用可能になる。
RCPTへのオプション
NEVER | これを指定すると、DSN(エラーメール)は返ってこない。 |
SUCCESS | 配送成功時にDSNが返る |
FAILURE | 配送失敗時にDSNが返る |
DELAY | 配送遅延時にDSNを返す(逆に、このオプションがないなら 配送が遅延したときに遅延に関するDSNを発行されないかもしれない) |
DSNを送信する場合には、「NOTIFY=NEVER」としなければならない(メールルー プを防ぐため)。
のようにする(rfc822とあるのは、このアドレスがrfc822形式だからである)。 なお、1つのRCPTに対して複数のORCPTを置くことはできない (501応答になる)。RCPT TO: <mimori@iyadesu.org> ORCPT=rfc822;mimori@puni.net
MAILへのオプション
FULL | DSN(エラーメール)に、元メール全体(メールボディを含む) が返る |
HDRS | DSN(エラーメール)に、元メールのヘッダのみが返る |
なお、指定がない場合はサーバのポリシーによっていずれもあり得る。
これにより、100文字以内でそのメールに印をつけることができる。後でDSNが 戻ってきたとき、その値を見ればいつ、誰に向けて送信したメールなのかを知 ることができるだろう。
EHLOキーワード | SEND |
追加コマンド名 | SEND |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 821 |
この拡張により、SENDコマンドが使える。 ただし、現在のメールの利用方法(POPないしIMAPでメールを取得するのが普通) からすると、メッセージを直接ターミナルへ送るというのはややナンセンスか もしれない。
EHLOキーワード | SOML |
追加コマンド名 | SOML |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 821 |
この拡張により、SOMLコマンドが使える。 ただし、現在のメールの利用方法(POPないしIMAPでメールを取得するのが普通) からすると、メッセージを直接ターミナルへ送るというのはややナンセンスか もしれない。
EHLOキーワード | SAML |
追加コマンド名 | SAML |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 821 |
この拡張により、SAMLコマンドが使える。 ただし、現在のメールの利用方法(POPないしIMAPでメールを取得するのが普通) からすると、メッセージを直接ターミナルへ送るというのはややナンセンスか もしれない。
EHLOキーワード | EXPN |
追加コマンド名 | EXPN |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 821 |
この拡張により、
EHLOキーワード | HELP |
追加コマンド名 | HELP |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 821 |
この拡張により、HELPコマンドが利用できるよ うになる。特に人間がtelnetなどで接続してDEBUGしたりするのに有用だろう。
EHLOキーワード | TURN |
追加コマンド名 | TURN |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 821 |
この拡張がある時、TURNコマンドを送信すると、 あたかも逆向きのSMTP接続をしたかのように、クライアントがサーバに、サー バがクライアントになる。
ただし、これはセキュリティ上問題になり得るため、安全な環境以外では利用 すべきでない。
EHLOキーワード | ETRN |
追加コマンド名 | ETRN |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 1985 |
この拡張により、サーバからクライアントに(逆向きに)メールを転送する。 TURNに近いが、サーバがクライアントを認証するのがこ となっている。
EHLOキーワード | ATRN |
追加コマンド名 | ATRN |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 2645 |
AUTHで認証されたTurn。 これを利用するにはまずAUTHで認証しなければ ならない。その上でATRNとするとサーバとクラ イアントがいれかわる。
EHLOキーワード | PIPELINING |
追加コマンド名 | なし |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 2920 |
この拡張があると、SMTPコマンドを送信してサーバからの応答が返るのをを待 たずに次のコマンドを送信しても、正しく処理される。RSET, MAIL, SEND, SOML, SAML, RCPTについては問題ない。それら以外(例えばDATA)については、 送信はしてよいが、その次のコマンドを送信する前にその処理が終わるのを待 たなければならない。
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コマンドにあらわれる値と異なるサイズのメッ
セージを送信したとしても、サーバはそれを受けとる)。
EHLOキーワード | ENHANCEDSTATUSCODES |
追加コマンド名 | なし |
MAILコマンドへの追加オプション | なし |
RCPTコマンドへの追加オプション | なし |
定義 | RFC 2034 |
これにより、サーバから拡張ステータスコード(RFC 1893) が送信される。