PHP 8.4.1 Released!

imap_savebody

(PHP 5 >= 5.1.3, PHP 7, PHP 8)

imap_savebody指定した本文部をファイルに保存する

説明

imap_savebody(
    IMAP\Connection $imap,
    resource|string|int $file,
    int $message_num,
    string $section = "",
    int $flags = 0
): bool

指定したメッセージの本文全体、あるいはその一部を保存します。

パラメータ

imap

IMAP\Connection クラスのインスタンス。

file

保存先ファイルへのパスを表す文字列、あるいは fopen() が返すファイル記述子。

message_num

メッセージ番号。

section

パート番号。ピリオドで区切られた整数文字列を指定します。 これは、IMAP4 仕様における本文パートのリストへのインデックスとなります。

flags

ビットマスクであり、以下の組合わせとなります。

  • FT_UID - message_numは UID である
  • FT_PEEK - 既に設定されていない場合、 \Seen フラグを設定しない
  • FT_INTERNAL - 内部フォーマットで文字列を返す。CRLF に正規化しない。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
8.1.0 引数 imap は、IMAP\Connection クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、有効な imap リソース が期待されていました。

参考

  • imap_fetchbody() - メッセージ本文中の特定のセクションを取り出す

add a note

User Contributed Notes 1 note

up
13
anon
12 years ago
By using imap_fetchbody() you may run in trouble by using too much memory. Using imap_savebody() may prevent this.

But the content will be encoded, in other words it is useless. Adding a filter can help here.

<?php
$whandle
= fopen('./incomming/tmp.tif','w');

stream_filter_append($whandle,
'convert.base64-decode',STREAM_FILTER_WRITE);

imap_savebody ($mbox, $whandle, $i, $partcounter++);

fclose($whandle);
?>

NOTE: To find the proper filter you need to check the encoding given by the structure of the body.
To Top