CALENDAR
S M T W T F S
 123456
78910111213
14151617181920
21222324252627
28293031   
<< July 2019 >>
ARCHIVES
CATEGORIES
RECOMMEND
RECOMMEND
RECOMMEND
WiiRemoteプログラミング
WiiRemoteプログラミング (JUGEMレビュー »)
白井 暁彦,小坂 崇之,くるくる研究室,木村 秀敬
RECOMMEND
RECOMMEND
RECOMMEND
MOBILE
qrcode
<< メールサーバーと通信( ※メモ書きとして) | main | いったい何がしたいのか(※メモ書きとして) >>
実際に読み出すメールはどうか Mac編(※メモ書きとして)
メールに添付ファイルをつけると、その部分は、メール本文とは違った扱いで、しかし、一本のメールデータの中に入れられる。
 それがマルチパートという考え方。

つまり、シングルパート(テキストメールだけ)の場合、次のような構成になる。

<メールヘッダ>
<メール本文>

マルチパートは、

<メールヘッダ>
<メール本文>
<添付ファイル部分1>(base64でエンコード)
<添付ファイル部分2>(base64でエンコード)
<添付ファイル部分3>(base64でエンコード)
となる。

具体的には、本文と添付ファイル部分を分ける、バウンダリー部分によって区別される。


 ためしに、Mac上にあるSweetmailというメーラーから、CSVファイルを添付して送ると、次のようになっていた。

+OK 5497 octets follow.
Return-Path: <******@*******.***>
Content-Type: multipart/mixed; boundary="20110501075631819"
"20110501075631819"がパートの区切りを示す。

--20110501075631819
Content-Type:text/plain; charset="ISO-2022-JP"

メール本文はここ

--20110501075631819(以下マルチパートの添付ファイル部分)
Content-Type: multipart/appledouble ; 
boundary="11D2A4_20110501075631819" ;
Content-Disposition: attachment ; filename="*****.csv"

--11D2A4_20110501075631819
Content-Type: application/applefile ;
リソースフォークと思われる部分

--11D2A4_20110501075631819
Content-Type: application/octet-stream ;
Content-Transfer-Encoding: base64
データフォークと思われる部分

--11D2A4_20110501075631819--
--20110501075631819--

基本的には、メール中の
Content-Type: multipart/mixed; boundary="20110501075631819"

という部分を見つけ、"20110501075631819"を本文中から探していけば、各パートの区切りはできる。しかし、問題が。。。
 どうも、MacとPCでは、メールの送られ方が違うらしい。
 添付ファイル中が、さらに2つのパートに区切られている。
Content-Type: multipart/appledouble ; 
boundary="11D2A4_20110501075631819" ;
 という部分である。区切りは"11D2A4_20110501075631819"
 これは、Mac がユニーク。MacとPCでは、もともとファイルの扱いが異なるので、その遺産を引っ張っているというわけである。
 PCは、そのデータファイルに関する情報を、拡張子のみで表現している。そのファイルをどんなアプリで開くかといった情報は、PCがデータベースを持っている。Mac は、それらの情報は、ファイル自身が「リソースフォーク」といった部分に持っており、拡張子がなくても正しくアプリと関連付けられる。
 というのは昔からの認識。現在はMacのファイルだって拡張子がついている。でも、遺産は残ってしまった。

 ほしいのは、
--11D2A4_20110501075631819
Content-Type: application/octet-stream ;
Content-Transfer-Encoding: base64

 データフォークと思われる部分だけである。
 Content-Type: application/octet-stream ;に注目すればいいのかな。。。

 まだ、不明。
| php scripting | 20:06 | comments(0) | trackbacks(0) | pookmark |
コメント
コメントする









この記事のトラックバックURL
http://blog.h2caster.net/trackback/1068705
トラックバック