SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
てるてる動画

【メール】SMTP、POP3を使うときの行頭のピリオド

問題

SMTPのDATAコマンドでピリオドと改行の扱いについて。

コラム:メールの終わり

SMTPのDATAコマンドにおけるメールの終わりは「.」 で示される。もし、メールに「.」が含まれていた らどうなるのでしょうか。SMTPではメールに「.」が含まれてい たときは「..」に変換してから送信します。そして受信側では 「..」は「.」に変換します。つまり行頭にある「.」 は「..」に変換されるのです。それではなぜ、メール中の 「.」だけを「..」と変 換しないのはなぜでしょうか。これは、メール中にもとからあった 「..」と変換した結果である 「..」とが区別がつかなくなるからです。 ですから、行頭にピリオドがあったら送信側ではもう一つピリオドを追加し、 受信側では行頭のピリオドを一つ削除します。

http://research.nii.ac.jp/~ichiro/syspro98/smtp.html

で、私がSMTPやPOP3をしゃべるときはどうしたらよいの?

試してみる

qmail環境で試した。MTAによって違いはある?

・SMTPで送信する

C:\>telnet mail.example.com 25
HELO mail.example.com
250 mail.example.com
MAIL FROM: xxxx@example.com
250 ok
RCPT TO: yyyy@example.jp
250 ok
DATA
354 go ahead
Subject: . no test
FROM: x
TO: y

message message

....
...
..
.
250 ok 1298079036 qp 22328
quit

・POP3で受信する → SMTPで送ったとおりのものが確認できる

C:\>telnet mail.example.com 110
USER yyyy@example.jp
+OK Password required.
PASS xxxxxxxx
+OK logged in.
STAT
+OK 727 19217027
RETR 727
+OK 293 octets follow.
Received: (qmail 27772 invoked from network); 19 Feb 2010 10:30:36 +0900
Received: from rrr.qqq.ppp.xxxxxx.com (HELO mail.example.com) (123.45.67.890)
  by 98.76.54.321 with SMTP; 19 Feb 2010 10:30:01 +0900
Subject: . no test
FROM: x
TO: y

message message

....
...
..
.

・メールソフトで受信する → ピリオドが減っている(CRLF..がCRLF.になっている)

Received: (qmail 27772 invoked from network); 19 Feb 2010 10:30:36 +0900
Received: from rrr.qqq.ppp.xxxxxx.com (HELO mail.example.com) (123.45.67.890)
  by 98.76.54.321 with SMTP; 19 Feb 2010 10:30:01 +0900
Subject: . no test
FROM: x
TO: y

message message

...
..
.

試してみる その2

・メールソフトで次の文面を送る

message message

....
...
..
.

・メールソフトで受信する → 当然のように見た目そのままで受信される

message message

....
...
..
.

・POP3で見てみる → 行頭のピリオドが増えている(CRLF.がCRLF..になっている)。メッセージ終了のCRLF.CRLFも見える。

message message

.....
....
...
..

.

まとめてみる

受け取った CRLF.. を CRLF. に読み替えるのはクライアント(メールソフト、telnetして生のデータを見ている私)の仕事

送りたい CRLF. を CRLF.. にして送るのはクライアント(メールソフト、telnetして生のデータを見ている私)の仕事

関連するメモ

コメント