Views
Simple Mail Transfer Protocol
SMTP
- Simple Mail Transfer Protocol
- 電子メールメッセージの転送
- TCP Port 25
- RFC2821
メールの経路
- メールソフトで作成
- 自ドメインのメールサーバへ
- 相手ドメインのメールサーバへ
- 必要に応じて中継
- Mail コマンド、POP、IMAP などで読む
Agent
- MUA ... Mail User Agent
- MTA ... Mail Transfer Agent
SMTP
- MTA <-> MTA
- MUA -> MTA
- MUA <- MUA は POP/IMAP
SMTP を hack
- telnet maiserver 25
- HELO oresama
- MAIL From: oresama@example.com
- RCPT To: dareka@example.co.jp
- DATA
- メール本文
- .
メッセージ形式
- RFC2822
- ヘッダ
- 本文
ヘッダ
- Received:
- From:
- To:
- Cc:
- Date:
- Subject:
MIME
- Multipurpose Internet Mail Extensions
- RFC2045
- 多目的インターネットメール拡張
- RFC2822 body に画像など binary data を埋め込む
- ファイル添付
MIME ヘッダ
- MIME-Version:
- Content-Type:
- multipart/mixed
- image/jpeg
- text/plain
添付の構造
Content-Type: multipart/mixed; boundary="abc"
--abc Content-Type: text/plain ...
--abc Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="abc.jpg" ...
--abc--
Base64
- 64進法でバイナリデータを ASCII 文字化する
- RFC3548
- 3 byte = 4 文字
日本語メール
- RFC1468
- 村井純
- 日本語メールは ISO-2022-JP で
- SMTP/MTA 7bit を前提にしていた
「機種依存文字」の問題
- RFC2237
- Microsoft, Japan
- ISO-2022-JP-1 の導入
- 誰も使わない(?)
Best Practice
- JIS X 0208-1983 の範囲で使う
- その範囲を越える場合は UTF-8 (unicode) で
- と思うが、なかなかそうはならない、、、
MIME ヘッダ
Subject: 試験
- 文字コード表
- JIS 試=3B6E 験=3833
import base64 x = "\x1b$B\x3b\x6e\x38\x33\x1b(B" print base64.encodestring(x)
GyRCO244MxsoQg==
Subject: =?ISO-2022-JP?B?GyRCO244MxsoQg==?=
- charset=iso-2022-jp; encoding=base64
宿題
- 次の Subject: を解読しなさい。その方法も書くこと
Subject: =?ISO-2022-JP?B?GyRCPUlCahsoQg==?=
l ... エル, 1 ... いち