IMAP 函数
在线手册:中文  英文

imap_savebody

(PHP 5 >= 5.1.3)

imap_savebodySave a specific body section to a file

说明

bool imap_savebody ( resource $imap_stream , mixed $file , int $msg_number [, string $part_number = "" [, int $options = 0 ]] )

Saves a part or the whole body of the specified message.

参数

imap_stream

imap_open() 返回的 IMAP 流。

file

The path to the saved file as a string, or a valid file descriptor returned by fopen().

msg_number

The message number

part_number

The part number. It is a string of integers delimited by period which index into a body part list as per the IMAP4 specification

options

A bitmask with one or more of the following:

  • FT_UID - The msg_number 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

参见


IMAP 函数
在线手册:中文  英文

用户评论:

anon (2012-08-12 01:59:00)

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 (2009-02-20 01:40:53)

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($tFileHandle4096);

fclose ($tFileHandle);
            
$tFileHandle fopen($tFile"w");
//write the new 8Bit string to the file
fwrite($tFileHandleimap_qprint($tFileOutput));
fclose ($tFileHandle);
?>

technocraze at gmail dot com (2007-12-20 00:38:53)

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 (2007-07-31 18:40:12)

This function will save ALL information from the email if the part number is left out. Pretty handy for archiving.

易百教程