[PHP-users 12036] Re: Mailboxに格納されたメールの、ヘッダと本文を分ける

Kaz Tanaka php-users@php.gr.jp
Thu, 05 Dec 2002 16:37:33 +0900


初めまして。
田中と申します。

丁度今、似たようなモノを作ろうとしていたのでレスします。

> Mailboxを開いて、ずっと眺めていたところ、私の環境では
> メール開始は必ず
> From someone@somecompany.com Web Dec …
> 行から始まっていました。
> 
> Q1.
> これは相手(送信者のMUAやMTA)に依存せずに、必ずこうなるの
> でしょうか?
これは環境によって異なる事もあると思います。
こちらで確認してる限りでも、Return-Path: XXXXXXXX で始まるモノが
ありました。

> 続いて、ここのメールをヘッダーと本文に分割したいと思い
> 調べてみたところ、
> 「分かれ目には改行を使う」と言うのを見つけ
> 下記のようなコードを書いてみました。
ヘッダとボディの分かれ目は改行+改行でOKです。
ただ、本文中にも改行が2個連続で存在する事もあるので注意が必要です。

私の場合は、メール1通分の文字列を取り出してsplit関数で\r\n\r\nのパター
ンで分割して配列にに入れてから配列の0番目がヘッダ、それ以降の要素は
本文って感じで処理してます。

ちなみにhttp://php.s3.to/ のメール関係のソースを参考にすると幸せに
なれるかも知れません。

> $mail_dev=array(0,233,453,882…)
> 一番最初のメールは0行目から232行目まで、
> 次のメールは233行目から452行目まで…
> と言う意味の配列です。
> 
> for($i=0;$i<sizeof($mail_dev);++$i) {
>     $j=$i+1;
>     $from=$mail_dev[$i];
>     $to=$mail_dev[$j];
>     //$toが空であれば→最後のメール時は
>     if($to<=0) { $to=sizeof($file); }
>     //一メール毎にテーブルで囲む
>     print "<table border=\"1\"><tr><td>\n";
>     for($k=$from;$k<$to;++$k) {
>         //ここが質問の箇所です。ヘッダと本文の区切りをつけたい
>         //その他、\r , \n も試してみました。
>         if($file[$i]=="\r\n") { print "<hr>\n"; }
>         if (eregi("(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)",$file[$k],$regs)) {
>             $file[$k]=$regs[1].base64_decode($regs[2]).$regs[3];
>         }
>         print $file[$k]."<br>\n";
>     }
>     print "</td></tr></table><p>\n";
> }
> 
> このコードでは駄目でした(^^;
> Q2
> ヘッダと本文の区切りはどうやって見つければいいのでしょうか?
> 
> 環境
> PHP4.2.3
> 
> 以上よろしくお願いいたします。
> 
> /_/_/_/_/_/_/_/_/_/_/_/_/_/
> Japan Human Base 
> Sotaro Okazaki
> Email : okazaki@jp-hb.com
> /_/_/_/_/_/_/_/_/_/_/_/_/_/
> 
> _______________________________________________
> PHP-users mailing list
> PHP-users@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users