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 资源

参见

添加注释

用户贡献注释 4 个注释

13
anon
12 年前
使用 imap_fetchbody() 可能导致内存使用过多而出现问题。使用 imap_savebody() 可以避免这种情况。

但内容将被编码,换句话说,它毫无用处。添加过滤器可以帮助解决这个问题。

<?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);
?>

注意:要找到合适的过滤器,您需要检查主体结构给出的编码。
-3
janus at forty-seven dot info
15 年前
似乎 imap_savebody 将 ascii 127 以上的特殊字符的附件保存为 Quoted-Printable。
但是,如果您需要以 utf8 格式保存,您可以在保存附件后使用 imap_qprint 函数

<?php
$tFile
= "/path/to/attachment";
$tFileOutput="";
$tFileHandle = fopen($tFile, "r");

// 将文件内容读入字符串
while(!feof($tFileHandle))
$tFileOutput = $tFileOutput . fgets($tFileHandle, 4096);

fclose ($tFileHandle);

$tFileHandle = fopen($tFile, "w");
// 将新的 8Bit 字符串写入文件
fwrite($tFileHandle, imap_qprint($tFileOutput));
fclose ($tFileHandle);
?>
-5
technocraze at gmail dot com
16 年前
我尝试使用此函数。但它似乎需要加载 php_zip.dll .. 我得到了以下 php 错误。

[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
-8
stupergenius at gmail dot com
17 年前
如果省略部分编号,此函数将保存电子邮件中的所有信息。非常适合归档。
To Top