ようこそゲストさん

QdmailReceiver Multibyte mail decoder & POP Client

一般関数タイプ

メールヘッダーの取得

メール差出人の名前部分
echo qd_receive_mail( 'header' , array('from','name') );
メール差出人のメールアドレス
echo qd_receive_mail( 'header' , array('from','mail') );
メール差出人関係の情報を一括取得
$from = qd_receive_mail( 'header' , array('from') ) ;
または
$from = qd_receive_mail( 'header' , 'from' );
でも可能
$from には、配列形式で、fromヘッダーから解析された情報が代入されます。

他のヘッダーについても、同様に取り出すことができます。
  • 注意点!
メールヘッダーの「名称」は、すべて「小文字」で指定してください。
Subjectは×。subjectは○です。
メール件名
$subject = qd_receive_mail( 'header' , array('subject','name') );
メール件名関係の情報を一括取得
$subject = qd_receive_mail( 'header' , array('subject') );
または
$subject = qd_receive_mail( 'header' , 'subject' );
でも可能
ヘッダー情報を全部配列で取得
$header = qd_receive_mail( 'header' , 'ALL' );

メール本文の取得

$body = qd_receive_mail( 'body' );
これで、htmlメールの場合は、html部分を取得し、テキストメールの場合は、テキスト部分を取得します。
テキスト部分は以下の形でも取得できます。
$body = qd_receive_mail( 'text' );
この形式は、テキスト部分を取得します。htmlメールであっても、代替テキストを取得します。
代替テキストがないhtmlメールの場合は、nullとなります。

html部分の取得。
$body = qd_receive_mail( 'html' );
テキストメールの場合は、nullとなります。
一般的には'body'コマンドを使用したほうがいいでしょう。

添付ファイルの取得

$attach = qd_receive_mail( 'attach' );
以下の形で、添付ファイルの配列が$attachに格納されます。
(例)
array(
    0 => array(
         'value' => '添付ファイルの中身(デコード済みのバイナリ)',
         'finename' => 'ファイル名(日本語デコード済み)',
         'finename_safe' => 'urlencode済みのファイル名',
         'content-type' => 'image/jpg',
         'enc' => 'base64',
        ),
    1 => array(
         'value' => '添付ファイルの中身(デコード済みのバイナリ)',
         'finename' => 'ファイル名(日本語デコード済み)',
         'finename_safe' => 'urlencode済みのファイル名',
         'content-type' => 'image/jpg',
         'enc' => 'base64',
         'content-id' => '........',
    ),
);
'finename'は、マルチバイト(日本語)のファイル名にデコード済みですので、そのままwindowsなどで、そのファイル名で保存しようとすると不都合がでる場合もあります。その場合は、ご自分でsjisにエンコードしてからお使いください。
(もちろん、元のファイル名がアルファベットファイル名であれば、特段の問題はでないと思います。)
'finename_safe'は、ファイル名をurlencodeしていますので、このままファイル名として保存しても、大丈夫なようにしています(windows,unix,linux)。

添付ファイルを保存するサンプルコード
$attach = qd_receive_mail( 'attach' );
foreach($attach as $att){
    $fp=fopen($att['filename_safe'],'w');
    fputs($fp,$att['value']);
    fclose($fp);
}

記事リスト

# craran 2009年08月31日(月) 午後1時41分

iPhoneからのメールを処理してみたのですが、添付ファイルの取得が出来ないようです。

ヘッダーを見てみると添付ファイルのパートが「Content-Disposition: inline;」となっているのですが、ここら辺が原因なのでしょうか。。。

# msa.uccky 2009年11月17日(火) 午後5時30分

multipartのメールが解析できないケースがありました。
QdDecodeBase->decodeBody()の以下を修正して対応。

preg_match( '/boundary\s*=\s*([^"]+)/is' , $this->header['content-type'] , $matches );

preg_match( '/boundary\s*=\s*"?([^"]+)"?/is' , $this->header['content-type'] , $matches );

# pws 2010年11月26日(金) 午後5時06分

msa.uccky 氏の修正に関連してfunction buildPart() 内の正規表現も修正が必要なようです。

preg_match( '/boundary\s*=\s*"([^"]+)"/is' , $header['content-type'] , $matches );

preg_match( '/boundary\s*=\s*"?([^"]+)"?/is' , $header['content-type'] , $matches );

# ひでまん 2011年09月16日(金) 午後3時52分

ほんとですね。修正しないと添付ファイル取れないみたいです。

# ひでまん 2011年09月16日(金) 午後4時58分

添付ファイルの保存方法
foreach($attach as $att){
$fp = fopen($att['filename_safe'],'rb');
$contents = fread($fp, filesize($att['filename_safe']));
file_put_contents('/home/acount/www/dirdir/app/tmp/hoge3.jpg', $contents);
fclose($fp);
}

これでうまくいけました。

# ひでまん 2011年09月16日(金) 午後6時02分

何度もすいません。
foreach($attach as $v){
file_put_contents('/home/acount/www/hogera/app/tmp/'.time().'.jpg', $v['value']);
}

でいけます。
上記の添付ファイルの保存方法はうまくいかないかもしれません。

# mikan 2012年04月09日(月) 午前9時20分

文中の finename → filename が正しいですね

# ひでまん 2012年06月08日(金) 午後1時20分

またはまったので修正版アップしておきました。
以下の物をそのまま使えばiphone でも画像を取得できますよ。
http://www.hideblog.net/nikkis/show/275/


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail_rec/04/tb/