imap_savebody
(PHP 5 >= 5.1.3, PHP 7, PHP 8)
imap_savebody — Save a specific body section to a file
说明
imap_savebody(
IMAP\Connection
resource|string|int
int
string
int
): bool
IMAP\Connection
$imap
,resource|string|int
$file
,int
$message_num
,string
$section
= "",int
$flags
= 0): bool
Saves a part or the whole body of the specified message.
参数
-
imap
-
IMAP\Connection 实例。
-
file
-
The path to the saved file as a string, or a valid file descriptor returned by fopen().
-
message_num
-
The message number
-
section
-
The part number. It is a string of integers delimited by period which index into a body part list as per the IMAP4 specification
-
flags
-
A bitmask with one or more of the following:
-
FT_UID
- Themessage_num
is a UID -
FT_PEEK
- Do not set the \Seen flag if not already set -
FT_INTERNAL
- The return string is in internal format, will not canonicalize to CRLF.
-
返回值
成功时返回 true
, 或者在失败时返回 false
。
更新日志
版本 | 说明 |
---|---|
8.1.0 |
现在 imap 参数接受 IMAP\Connection
实例,之前接受 资源(resource)。
|

User Contributed Notes 4 notes
anon ¶
9 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.
janus at forty-seven dot info ¶
13 years ago
It seems that imap_savebody saves attachments with special characters above ascii 127 as quoted printable.
But if you need it in utf8, you may use the imap_qprint function after the attachment is saved:
<?php
$tFile = "/path/to/attachment";
$tFileOutput="";
$tFileHandle = fopen($tFile, "r");
//get the content of the file into a string
while(!feof($tFileHandle))
$tFileOutput = $tFileOutput . fgets($tFileHandle, 4096);
fclose ($tFileHandle);
$tFileHandle = fopen($tFile, "w");
//write the new 8Bit string to the file
fwrite($tFileHandle, imap_qprint($tFileOutput));
fclose ($tFileHandle);
?>
technocraze at gmail dot com ¶
14 years ago
I tried to use this function. But it seems it requires php_zip.dll to be load.. i got the php errror like below.
[20-Dec-2007 13:38:17] PHP Warning: PHP Startup: Unable to load dynamic library './php_zip.dll' - ./php_zip.dll: cannot open shared object file: No such file or directory in Unknown on line 0
[20-Dec-2007 13:38:17] PHP Fatal error: Call to undefined function imap_savebody() in /opt/oss/share/apache2/htdocs/blogtest/wp-inst/batch/pop3_mail.php on line 153
stupergenius at gmail dot com ¶
14 years ago
This function will save ALL information from the email if the part number is left out. Pretty handy for archiving.
备份地址:http://www.lvesu.com/blog/php/function.imap-savebody.php