SMTPとは|仕組み・ポート・暗号化・認証(SPF/DKIM/DMARC)から運用とトラブルシュートまで
SMTPとは — 概要と歴史
SMTP(Simple Mail Transfer Protocol)は、インターネット上で電子メールを送信・転送するための標準プロトコルです。1970〜80年代に開発され、RFC 821(1982)により規定された後、現在は RFC 5321(2008)などで仕様が整理されています。SMTP は主に「メール送信(転送)」を扱い、受信・閲覧は POP3 や IMAP といった別プロトコルが担います。
SMTP の役割とメール配信の流れ
メール配信は一般に次のような流れになります。
- ユーザーのメールクライアント(MUA)がメールを作成し、送信サーバ(メール送信エージェント、MTA またはサブミッションサーバ)に接続して送信要求を行う。
- 送信サーバは宛先のドメインの MX レコードを DNS で問い合わせ、適切な受信側 MTA に SMTP 接続を確立してメールを転送する。
- 受信側 MTA は受け取ったメールをローカル配送(ローカル配送エージェント)や受信ユーザーの配送キューに保存し、ユーザーは POP3/IMAP で取得する。
プロトコルの基本動作(SMTP セッション)
SMTP はコマンドとレスポンスのテキストベースのやり取りで成り立っています。典型的なセッション例:
220 mail.example.com ESMTP Postfix EHLO client.example.org 250-mail.example.com Hello client.example.org 250-STARTTLS 250-AUTH PLAIN LOGIN 250 SIZE 52428800 MAIL FROM:250 2.1.0 Ok RCPT TO: 250 2.1.5 Ok DATA 354 End data with <CRLF>.<CRLF> From: Alice <alice@example.org> To: Bob <bob@destination.org> Subject: Test ...message body... . 250 2.0.0 Ok: queued as 12345 QUIT 221 2.0.0 Bye
主なコマンド:HELO/EHLO(挨拶)、MAIL FROM(送信者指定)、RCPT TO(受信者指定)、DATA(本文送信)、RSET、VRFY、EXPN、NOOP、QUIT。EHLO は拡張(ESMTP)を用いる際に使用します。
ESMTP と拡張機能
RFC 1869 で導入された ESMTP により、拡張コマンドやオプションが追加可能になりました。サーバは EHLO に対する 250 応答でサポート機能(例:STARTTLS、AUTH、SIZE、8BITMIME、PIPELINING 等)を通知します。これにより暗号化の開始、認証方式の交渉、大きなメッセージの扱いなどが実現されます。
暗号化と認証
- STARTTLS(RFC 3207): 通常の SMTP セッションを平文で始め、EHLO → STARTTLS → TLS ハンドシェイク → 再度 EHLO の流れで暗号化を開始する方法。ポート 25(MTA 間転送)や 587(メッセージサブミッション)で広く使われる。
- SMTPS(ポート 465): 接続時に TLS を即座に確立する「SMTPS」の慣習的使用があり、歴史的経緯で 465 を使う実装も存在する(現在は 587 が推奨)。
- SMTP AUTH(RFC 4954): メール送信時のユーザー認証で、PLAIN/LOGIN、CRAM-MD5、XOAUTH2 等の方式がある。認証は通常 TLS 上で行うべき。
ポート番号と用途
- 25番: MTA 間の標準 SMTP(転送用)。インターネット上の他サーバとメールをやり取りするための主要ポート。
- 587番: メールサブミッション(クライアントからの送信)。認証を行い TLS を用いることが推奨される。
- 465番: SMTPS(旧来の暗号化即時接続)。歴史的に利用されるが、仕様上は 587 が標準。
メールヘッダ、MIME、文字エンコーディング
SMTP 自体はメッセージの「転送」を扱うだけで、メッセージの構造(ヘッダや本文の表現)は RFC 5322 や MIME(RFC 2045〜2049)によって定義されます。添付ファイルやマルチパート(複数部)を扱うために MIME が使われ、文字コード・バイナリデータは Content-Type、Content-Transfer-Encoding(base64、quoted-printable など)で指定されます。国際化(UTF-8 を含むローカルパートやヘッダ)のために SMTPUTF8(RFC 6531 等)が定義されていますが、相互運用のために対応状況を確認する必要があります。
宛先決定 — MX レコードとフォールバック
送信側 MTA は受信ドメインの MX(Mail Exchange)レコードを DNS で問い合わせ、優先度の低い値(優先度 10 等)から順に接続を試みます。MX レコードが存在しない場合は A/AAAA レコードにフォールバックすることがあります。DNS の設定不備や MX の誤設定は配送失敗の主要原因です。
迷惑メール対策と信頼性向上技術
SMTP がスパムやなりすましに悪用される問題に対応するため、多くの追加技術が使われます。
- SPF(Sender Policy Framework, RFC 7208): 送信元 IP がそのドメインのメール送信を許可されているかを DNS で定義して検証する。
- DKIM(DomainKeys Identified Mail, RFC 6376): 送信ドメインがメッセージに電子署名を付与し、改ざん検知とドメインの所有証明を行う。
- DMARC(Domain-based Message Authentication, Reporting and Conformance, RFC 7489): SPF/DKIM の結果に基づくポリシーとレポーティングを提供し、受信側がどのように処理するか(隔離・拒否)を指示する。
- リストブラックリスト(RBL)や送信元レピュテーション: 迷惑メール送信歴や IP 評価に基づき受信側が拒否することがある。
- グレイリスティング、レート制限、バウンス管理: 一時的な遅延処理や接続制限でスパムの影響を軽減する。
よくある運用上の問題と対策
- オープンリレー問題: 認証無しで第三者のメール中継を許すとスパム源になり得る。必ず送信者認証やアクセス制御を設定する。
- 配信不能(5xx/4xx エラー): 4xx は一時的エラー(リトライ可能)、5xx は恒久的な失敗。ログで SMTP 応答コードを確認し原因を突き止める。
- 逆引き(PTR)や SPF/DKIM 不整合: 多くの受信側が逆引き未設定や SPF 失敗を拒否理由とする。DNS と署名の整合性を保つ。
- TLS 証明書の問題: 自己署名証明書や期限切れは STARTTLS 後の接続問題や評価低下の原因。
トラブルシュートの基本手順とツール
問題解決時の一般的なチェック項目:
- ログ収集: /var/log/maillog、/var/log/mail.log など MTA のログを確認する。送信・受信の SMTP 応答コードとキュー状況を確認。
- DNS チェック: dig MX/domain, dig TXT domain(SPF)で DNS 設定を検証。逆引き (PTR) も確認。
- ポート到達性: telnet mail.domain 25 や openssl s_client -starttls smtp -crlf -connect host:25 で接続と TLS ネゴシエーションを試す。
- メールヘッダ解析: Received ヘッダを追跡して転送経路や遅延の原因を特定する。
- ブラックリストチェック: 送信 IP が RBL に載っていないか確認する。
実務的なベストプラクティス
- 送信は submission(587)を利用し、TLS+認証を必須にする。
- SPF、DKIM、DMARC を設定して受信側の信頼を高める。DMARC レポートを解析して問題を把握する。
- 適切な逆引き(PTR)を設定し、HELO/EHLO 名と一致させる。
- ユーザ送信のレート制限やキュー管理を実装し、突然の送信増加がないか監視する。
- バウンス(返送)の処理を設計し、永久失敗と一時失敗を区別して自動処理する。
将来の展望と国際化
電子メールは古くからのプロトコルですが、SMTP の拡張(例:SMTPUTF8)は国際文字(UTF-8)を含むアドレスやヘッダのサポートを進めています。また IPv6 の普及、暗号化の常時化、認証・レピュテーション手法の高度化が進むため、運用者は新しい仕様への対応と既存インフラの更新を継続的に行う必要があります。
まとめ
SMTP はインターネットメールの中核を成すプロトコルであり、単純なテキストコマンドで動作する一方、実運用では暗号化、認証、DNS 設定、スパム対策など多面的な知識が必要です。適切な設定と継続的な監視・対応により、配送信頼性とセキュリティを高められます。
参考文献
- RFC 821 - Simple Mail Transfer Protocol (Original, 1982)
- RFC 5321 - Simple Mail Transfer Protocol (Updated)
- RFC 5322 - Internet Message Format
- RFC 1869 - SMTP Service Extensions (ESMTP)
- RFC 3207 - SMTP over TLS (STARTTLS)
- RFC 4954 - SMTP Service Extension for Authentication
- RFC 6409 - Message Submission
- RFC 6531 - SMTPUTF8 (Internationalized Email Addresses)
- RFC 2045 - MIME Part One (Format of Internet Message Bodies)
- RFC 2046 - MIME Part Two (Media Types)
- RFC 6376 - DomainKeys Identified Mail (DKIM)
- RFC 7208 - Sender Policy Framework (SPF)
- RFC 7489 - DMARC


