ようこそゲストさん

QdmailReceiver Multibyte mail decoder & POP Client

基本タイプ(OOPタイプ)

メールヘッダーの取得

メール差出人の名前部分
$receiver には、初期設定またはPOPモード初期設定にて設定した、QdmailReceiverオブジェクトが入っているものとします。
$receiver->header( array( 'from' , 'name' ) );
メール差出人のメールアドレス
$receiver->header( array('from','mail') );
メール差出人関係の情報を一括取得
$receiver->header( array('from') ) ;
または
$receiver->header( 'from' );
でも可能
配列形式で、fromヘッダーから解析された情報が返されます。

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

メール本文の取得

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

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

添付ファイルの取得

$attach = $receiver->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 = $receiver->attach();
foreach($attach as $att){
    $fp=fopen($att['filename_safe'],'w');
    fputs($fp,$att['value']);
    fclose($fp);
}

# テツ 2010年08月06日(金) 午後9時12分

添付ファイルですが、
メール本文がなく、添付ファイルがある場合、
$this->already_textプロパティがtrueにならないため、
[buildPart]メソッドがループし、同じ添付ファイルが複数追加されておりました。

# 太郎 2010年10月13日(水) 深夜1時15分

差出人のアドレス取得についてですが、display-name部分に@が入っていると動作がおかしくなります。
最近だとiPhoneのメールなんかで上記の形式の人が多いようです。

具体的には、Fromヘッダーが以下の場合、
From: "test123@example.com" <test@example.com>
$receiver->header(array('from','mail'))の動作として
test@example.com
を取得して欲しいのですが、実際には
"test123@example.com"
が返ってきます。
(後半の<>内を取得して欲しいのに前半の""内を取得してしまっている、かつダブルクォーテーションも返り値に含まれている)

対策として、750行目の正規表現を
'/<?([^<>\s]+@[^<>\s]+\.[^<>\s]+)>?/is'
から
'/<?([^<>\s]+@[^<>\s]+\.[^<>\s]+)>?[^<]*?$/is'
に変更することで、期待通りに動作しました。

# anon 2012年11月05日(月) 午後0時01分

大変おせわになっています。
iPhoneの標準のメーラーから画像を添付して送ると、
$att['filename']
$att['filename_safe']
が存在しません。あと、
$att['value']
で添付ファイルのデータを取得できないです。恐縮ですが、何かご助言を頂けないでしょうか...。

# hide 2017年04月28日(金) 午前11時05分

お世話になっております。
Gmail等で添付ファイルがあると本文ごとエンコードされてしまうため、本文取り出しができません(本文なし扱いとなる)。
本文も添付ファイルも取得する方法はありますでしょうか。


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