Simple Mail Transfer Protocol
RFC 5248 - A Registry for SMTP Enhanced Mail System Status Codes (BCP 138) (updates RFC 3463)
RFC 5321 - The Simple Mail Transfer Protocol (updates RFC 1123)
RFC 5322 - Internet Message Format
RFC 5336 - 廃止→ RFC 6531
RFC 5504 - Downgrading Mechanism for Email Address Internationalization
RFC 5672 - 廃止→ RFC 6376
RFC 6152 - 8BITMIME拡張について
RFC 6376 - DomainKeys Identified Mail (DKIM) Signatures
RFC 6409 - Message Submission for Mail (STD 72)
RFC 6522 - The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages
RFC 6531 - SMTP Extension for Internationalized Email Addresses
RFC 7504 - SMTP 521 and 556 Reply Codes
RFC 8314 - Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access
SMTPサーバーはDATAコマンドでメールデータを渡され、メールトランザクションが終了したら必ず先頭にReceivedヘッダフィールドを追加しなければならない。すでにReceived行があっても、書き換えたり削除したり順番を替えたりしてはならない。Receivedヘッダフィールドは
の情報で構成される。ここでは改行しているが実際は改行ではなくスペースで区切られる。FROM節はEHLOコマンドで示された送信元ドメイン名とTCP接続から判明する送信元のIPアドレスとを両方含むべきである。VIA, WITH, ID, FOR節は任意である。
また、SMTPサーバーはメールの最終配送を行う場合、先頭にReturn-pathヘッダフィールドを追加しなければならない。Return-pathヘッダフィールドはMAILコマンドの<送信元メールアドレス>を挿入する。SMTP環境から出ていく時、SMTPの送信元メールアドレス情報が失われないようにするためである。この、エラーを報告するのに使用される送信元メールアドレスは実際の送信者のメールアドレスと異なることも可能である。
SMTPの暗号化にはFTPなどの他のテキストベースプロトコルと同様に途中から暗号化を開始するSTARTTLSと最初から暗号化するSMTPSの2種類がある。SMTPSの場合はポート番号を同じには出来ないため、465を使う。
また、メールトランザクションはMAIL、RCPT、DATAの順で実行されなければならない。
QUITコマンドは接続を終了する。クライアントがQUITコマンドを送信したらサーバーは応答コード221を返し接続を閉じる。引数は許されない。
RSET(RESET)コマンドは現在のメールトランザクションを中止する。引数は許されない。
NOOP(NO OPERATION)コマンドは何もしない。SMTPサーバーは必ず250 OKを返す。引数があっても無視される。
HELPコマンドはヘルプを表示する。引数に対応するかはソフトウェアによる。
その他、VRFY、EXPNコマンドがあるが、スパマーに利用されるため現在では殆どの場合利用不可とし252を返すか、認証されたユーザーのみ利用できるようにしている。VRFY, EXPN, HELP, NOOP, RSET, QUITコマンドはいつ実行されても良い。HELPとEXPNコマンドへの対応は任意であり実装されていないこともある。
SMTP-AUTH 標準化以前に普及したユーザー制限方法。メール送信する前にメール受信(POP3 の ログイン)を要求するため、こう呼ばれる。RFC 2476 - Message Submission において、クライアントを制限する方法の一つに挙げられたもの。