SMTP メール送信

メモ:

SMTPは、メールを送信するためのプロトコルです。一般的にメールを受信するにはPOP3で行います。ここは、送信用のプロトコルに関するメモです。

詳しくは、RFC821を参照します。

コマンド

SMTPは、クライアントからのコマンドとサーバからのリプライコードで通信を行います。 コマンドとリプライコードは、次のようになります。(他にもあります)。

コマンド 意味
HELO domain名(クライアント名) SMTP通信を開始する
MAIL FROM:<reverse-path> メールの送り主を送信する(主にメールアドレス)
RCPT TO:<forward-path> メールの宛先を送信する
DATA ヘッダを含むメールの本体を送信する
QUIT SMTP通信を終了する

その他、RSET,SEND,SOML,SAML,VRFY,EXPN,HELP,NOOP,TURNなど。

応答

サーバからのメッセージは、コードとテキストからなります。送られてきたコードを調べることでサーバ側でエラーが発生していないかを調べることができます。

サーバからの応答が複数行(多行応答)送られてくる場合があります。その場合、コードとテキストをハイフン(-)でつなぎ、最後の行のみコード<sp>テキストとなります。(RFC821.付録 E)

250-最初の行
250-二番目の行
250 最後の行

メール(メッセージ)の終わり

メールのメッセージの終わりは、ピリオド(.)のみの行が終わりになります。 正確には、CRLF.CRLFが終了になります。

メールがピリオド(.)から始まる行を含む場合には、クライアントは前にピリオド(.)を付加して送信します。付加されたピリオド(.)は、SMTPサーバで削除されます。

日本語の扱い

日本語を送信するには、一般的にJISコードの文字を使用します。

SMTPで送信するデータは、7ビットASCII文字となっています。そのため、Shift-JISやEUCで日本語を送信することができません。通常、文字コードをJISへ変換して送信します。

応答コード

コード 意味
211 System status, or system help reply
214 Help message
ヘルプメッセージ。
220 <domain> Service ready
準備完了。
221 <domain> Service closing transmission channel
接続を閉じる。
250 Requested mail action okay, completed
要求された処理は実行可能。完了。
251 User not local; will forward to <forward-path>
受信者が存在しないので[forward-path]に転送する。
354 Start mail input; end with <CRLF>.<CRLF>
メールの入力開始。入力終了は「.」のみの行を送信。
421 <domain> Service not available,closing transmission channel
サービスは利用不能。接続を閉じる。
450 Requested mail action not taken: mailbox unavailable
メールボックスが利用できないため、要求された処理は実行不能。
451 Requested action aborted: local error in processing
処理中にエラーが発生。要求された処理は失敗。
452 Requested action not taken: insufficient system storage
記憶装置の空き領域が不十分なため、要求された処理は実行不能。
500 Syntax error, command unrecognized
文法に間違いがあるため、コマンドが理解できない。
501 Syntax error in parameters or arguments
引数の文法に間違いがある。
502 Command not implemented
指示されたコマンドはこのシステムには実装されていない。
503 Bad sequence of commands
コマンドの発行順序が間違っている。
504 Command parameter not implemented
コマンドの引数が未定義。
550 Requested action not taken: mailbox unavailable
メールボックスが利用できないため、要求された処理は実行不能。
551 User not local; please try <forward-path>
受信者が存在しない。[forward-path]に送信せよ。
552 Requested mail action aborted: exceeded storage allocation
ディスク不足のため、要求された処理は実行不能。
553 Requested action not taken: mailbox name not allowed
メールボックスの名前が不適切なため、要求された処理は実行不能。
554 Transaction failed
処理失敗。