人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Dovecot IMAPからメールの取得をしようとしてるのですが、
FETCH 8 (BODY.PEEK[1])

FETCH 8 (BODY.PEEK[2])
とすると
*11 FETCH BODY[1]・・・等で取得できるのですが、
FETCH 8 (BODY.PEEK[1.2])
とすると
* 11 FETCH (BODY[1.2] NIL)
となりNILがでて取得できないのですが、何か原因分かりますでしょうか?

情報が少ないと思いますので、可能性で構いませんので、何かアドバイスあればお知らせください。

●質問者: MrB
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● JULY
●100ポイント ベストアンサー

きちんと確認したわけではないのですが、「BODY.PEEK[1.2]」は、メッセージパートの1番と2番、という意味ではなく、「メッセージパート1番の中にあるパート2番」という意味ではないでしょうか?

IMAP4のFETCHオプションの一覧

パート番号の示すパートのボディ部のみを示す。複雑な入れ子の場合には、[1.2] などとピリオドで階層をくくって、下位階層を示すこともできる。


例えば、メールに別のメールが添付されていて、その添付されたメールの中の添付ファイルを取り出す、といった時に「1.2」といった指定をするのではないのでしょうか。


MrBさんのコメント
なるほど、ということはメールが1通しかなくて、その中に添付ファイルがある場合、添付ファイルの中身だけを取り出すということはできないと考えたほうが良いのでしょうか。 メッセージパートの2番だけの取得はできない?

JULYさんのコメント
>> メッセージパートの2番だけの取得はできない? << 質問文にあるように BODY.PEEK[2] とすれば取れると思います。 >> ということはメールが1通しかなくて、その中に添付ファイルがある場合、添付ファイルの中身だけを取り出すということはできないと考えたほうが良いのでしょうか。 << そもそも、FETCH の直後にメッセージ番号を指定(質問文だと、8)を指定していますよね? FETCH 8 (BODY.PEEK[1.2]) だと、8番のメールのパート1番の中にあるパート2番、という意味になると思います。 普通に添付ファイル付きのメールだと、1番に本文が、2番に添付ファイルが、ということが多いと思いますが、であれば、 FETCH 8 (BODY.PEEK[2]) で、8番のメールのパート2番を取り出すことになり、添付ファイルを取り出すことになると思います(HTML メールの HTML 部分、という可能性もありますが)。

MrBさんのコメント
なるほど、ということは動作自体には問題ないということですね。ありがとうございます。

JULYさんのコメント
今、ちょうど確認出来ました。 MIME の構造で、最初のパートに本文があるんだけど、そのパートが中が2つのパートに分かれていて、プレーンなテキストと HTML メール、この本文パートの後ろに添付ファイル、という構造のメールを FETCH してみました。 BODY.PEEK[1] とすると、プレーンテキストと HTML メールの部分が取得され、BODY.PEEK[1.1] とすると、そのうちのプレーンテキストの部分、BODY.PEEK[1.2] とすると HTML メールが取れました。 BODY.PEEK[2] とすると、そのメールの添付ファイルが取れました。 ということで、「1.2」という表記は階層構造を意図した指定で間違いないと思います。

質問者から

JULYさん丁寧な回答ありがとうございました。

実際はroundcubeの調整をやっていたのですが、
どうもroundcubeの仕様自体が本来2であるべきところが、
1.2になってたりするようでした。

無理やりですが、1.をstr_replaceで消すことでうまくいってるような気がします。


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ