[PHP-users 10804] 添付ファイルの分別について

php-users@php.gr.jp
Mon, 14 Oct 2002 10:06:32 +0900


お世話になっております。

今回、初めて投稿させていただきます月島と申します。
現在、Webメーラを作成しており、添付ファイルの受信に
苦戦しております。
IMAP,POP3,NNTP関数を使用して、メールを受信して、
添付ファイルと本文を分別しようと思っていたのですが、
私が契約しているサーバーに、XLIIIMAP,POP3,NNTP関数
がインストールされていなくて、独自に、110番ポートに
アクセスして、POPのLIST と RETRコマンド使用して、
メールを解析しております。
添付ファイルなしのものに関しては、宛先、件名、本文、
と別々に取り出すことはできたのですが、添付ファイルがあるものに関しては、宛
先、件名、本文と別々に取り出すことはできるのですが、本文に添付ファイルがつ
いてしまい、取り出すことができません。
IMAP,POP3,NNTP関数を使用せずに、本文と添付ファイルを取り出す方法がありまし
たら、教えていただけないでしょうか。
お手数をおかけしますがよろしくお願いいたします。

月島 都羽沙
(Tsukishima Tubasa)

開発環境

Apache 1.3.26
PHP 4.2.2

================ ソース ========================================================

for($i=1; $i<=$num; $i++){
  fputs($sock, "RETR $i\r\n");
  $line = fgets($sock,512);
  $flag = false;
  while (!ereg("^\.\r\n",$line)) {
    $line = fgets($sock,512);

    if (ereg("^From:",$line) && $mail_dat[$i]['from'] == ""){
      $line = mb_convert_encoding($line, "SJIS", "auto"); 
      if (eregi("(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)",$line,$regs))
        $line  = $regs[1].base64_decode($regs[2]).$regs[3];
      $line  =  htmlspecialchars(mb_convert_encoding($line, "SJIS", "auto")); 
      $mail_dat[$i]['from'] = $line;
    }
    if (ereg("^To:",$line) && $to == "" && !ereg("^\w",$line) ){
      $line = mb_convert_encoding($line, "SJIS", "auto"); 
      if (eregi("(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)",$line,$regs))
        $line = $regs[1].base64_decode($regs[2]).$regs[3];
      $line  =  htmlspecialchars(mb_convert_encoding($line, "SJIS", "auto")); 
      $mail_dat[$i]['to'] .= $line;
    }
    if (ereg("^Subject:",$line) && $to == "" && !ereg("^\w",$line) ){
      $line = mb_convert_encoding($line, "SJIS", "auto"); 
      if (eregi("(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)",$line,$regs))
        $line  = $regs[1].base64_decode($regs[2]).$regs[3];
      $line  =  htmlspecialchars(mb_convert_encoding($line, "SJIS", "auto")); 
      $mail_dat[$i]['Subject'] .= $line;
    }

    if (trim($line)=="") $start = true;
    if ($flag){
      $line = htmlspecialchars($line);
      $mail_dat[$i]['body'] .= $line;
    }

    if(empty($line)) break;

  }
}