[PHP-users 3675] Re: メール添付画像ファイルのファイル名を取得したい
Tsuzuki Toshiya
php-users@php.gr.jp
Mon, 19 Nov 2001 19:49:26 +0900 (JST)
こんにちは。都築です。
#ちょっと応答が遅いかもしれませんが…。
Jun 2kawa さんは書きました:
>> ちなみに parameters配列のインデックスの意味は私も良く
分かりません。
>> とりあえず 0 を指定してますが。あと、dparameter配列と
いうのもありますが
>> なにに使うんでしょうね。
送信に使用するメーラによってファイル名はparameterに入る か
dparameterに入るかが変わってきます。
以下の例はAL-MAILによる添付ファイルのimap_fetchstructure
実行例です。
#ちょっと長くてごめんなさい。
stdClass Object
(
[type] => 1
(中略)
[parts] => Array
(
[0] => stdClass Object
(中略)
[1] => stdClass Object
(
[type] => 5
[encoding] => 3
[ifsubtype] => 1
[subtype] => JPEG
[ifdescription] => 0
[ifid] => 0
[bytes] => 62868
[ifdisposition] => 1
[disposition] => ATTACHMENT
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => FILENAME
[value] => =?ISO-2022-JP?BGyRCQGkkSEBpP1IbKEIuanBn?=
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => NAME
[value] => =?ISO-2022-JP?BGyRCQGkkSEBpP1IbKEIuanBn?=
)
)
)
[2] => stdClass Object
(
[type] => 5
[encoding] => 3
[ifsubtype] => 1
[subtype] => JPEG
[ifdescription] => 0
[ifid] => 0
[bytes] => 21070
[ifdisposition] => 1
[disposition] => ATTACHMENT
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => FILENAME
[value] => a.jpg
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => NAME
[value] => a.jpg
)
)
)
)
)
というわけで
$mes->parts[1と2]->dparameters[0]->value
と
$mes->parts[1と2]->parameters[0]->value
の両方にファイル名が入ってますね。(添付は2つ着いてます
。)
#どっちかにしかファイル名を書かないメーラも多いですし、
エンコード方法もBase64とは限りません。
全部送信メーラの設定ですので。
>何がどこに格納されているのか、混乱してしまいますね。お
そらくメチャメチャ
>使い勝手の良い関数な感じがするんですけど、情報が少なす
ぎるのが残念です。
>ソースとか、ヘッダファイルを直接見てみるしかないのかな
。。。。
print_r コマンドを使ってみてください。先の例みたいにみん
な表示されます。
ちなみに、例は以下のコードをコマンド実行して出力しました
。
$mbox = imap_open ("{サーバ:110/pop3}","ユーザ","パスワ
ード");
// メール数を求める。
$mboxes = imap_check($mbox);
$mail_cnt = $mboxes->Nmsgs;
// 一番最後のメールを解析
$mes = imap_fetchstructure( $mbox, $mail_cnt );
// 表示
print_r( $mes );
>確かにここにファイル名が格納される場合もあるんですが、
>おそらく送信側のメールクライアントに依存するのだと思い
ますが、
>ヘッダの記述がDispositionには無い場合もあったのです。
>ちなみに、Dipositionの内容も "Attachment"までは
>取得できたんですけど、その先が。。。。
ちょっと面倒なんですが、
全partsについて{
ifdparametersが1なら{
全dparametersについて{
attributeが"FILENAME"なら{
ファイル名はbasename(xxx->value)
}
}
}
ifparametersが1なら{
全parametersについて{
attributeが"NAME"なら{
ファイル名はbasename(xxx->value)
}
}
}
}
みたいなコーディングを使ってます。
本当はこれでもRFCには準拠しないようですし、ファイル名が
日本語だと
JISコードで、MIMEエンコードされてますので注意が必要です 。
__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!
http://bb.yahoo.co.jp/