imap_setflag_full

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_setflag_full设置邮件的标记

描述

imap_setflag_full(
    IMAP\Connection $imap,
    string $sequence,
    string $flag,
    int $options = 0
): true

导致存储将指定的 flag 添加到为指定 sequence 中的邮件设置的标记中。

参数

imap

一个 IMAP\Connection 实例。

sequence

一组邮件编号。您可以使用 X,Y 语法枚举所需的邮件,或者使用 X:Y 语法检索一个区间内的所有邮件。

flag

您可以设置的标记为 \Seen\Answered\Flagged\Deleted\Draft,如 » RFC2060 中定义。

options

一个位掩码,可能包含以下选项

  • ST_UID - 序列参数包含 UID 而不是序列号

返回值

始终返回 true

错误/异常

如果 options 无效,则抛出 ValueError

变更日志

版本 描述
8.1.0 现在 imap 参数需要一个 IMAP\Connection 实例;之前需要一个有效的 imap 资源
8.0.0 现在,在 options 参数值无效时会抛出 ValueError。之前会发出警告,函数返回 false

示例

示例 #1 imap_setflag_full() 示例

<?php
$mbox
= imap_open("{imap.example.org:143}", "username", "password")
or die(
"can't connect: " . imap_last_error());

$status = imap_setflag_full($mbox, "2,5", "\\Seen \\Flagged");

echo
gettype($status) . "\n";
echo
$status . "\n";

imap_close($mbox);
?>

参见

添加备注

用户贡献的备注 10 个备注

23
AJCartmell at ricardo dot com
22 年前
我花了很长时间才让这个工作,然后最终记起来我以只读方式打开了邮箱 - 显然您需要写入权限才能设置标记!
5
daniel dot blackburn at galorwebservices dot com
13 年前
在可能的情况下,我会避免使用 POP3 帐户。我的主机允许我升级到 IMAP,它要容易得多。我认为用 POP3 精确创建任何形式的邮件客户端的唯一方法是将邮件下载到 SQL 数据库中,这从一开始就是一项艰巨的任务,考虑到 IMAP 标准已经内置了我们需要的功能。
我在 POP3 中尝试了标记设置,似乎它们根本没有保留,而且几乎不可能检索未读邮件的数量(即,已查看/未查看功能不起作用)。
转换为 IMAP 后它工作了 - 此部分中的大多数函数似乎都集中在 IMAP 上,并且通常不会与 POP3 一起使用。
1
php AT holtsmark DOT no
22 年前
如果您想取消设置 \Seen 标记,请使用 imap_clearflag_full 函数。

https://php.net/manual/en/function.imap-clearflag-full.php
0
ming0 at mailinator dot com
13 年前
更正 phpidiot at avanca-a dot de

<?php

imap_setflag_full
($mbox, '1', 'label1');

?>
0
phpidiot at avanca-a dot de
14 年前
如果您的服务器支持 IMAP 4rev1,则可以使用 $label{label-nr} 添加“关键字”,也称为“标签”或“PERMANENTFLAGS”。

<?php

$mbox
= imap_open("{imap.example.org:143}", "username", "password")
or die(
"can't connect: " . imap_last_error());

$status = imap_setflag_full($mbox, "2,5", "\$label1");

echo
gettype($status) . "\n";
echo
$status . "\n";

imap_close($mbox);
?>
0
death at metalfield dot com
23 年前
确实,POP3 不支持指示邮件“新颖性”的标记。不过,还有其他方法可以解决这个问题。例如,我见过邮件传送系统,它会添加一个 Status: 标头字段来指示其状态(参见 RFC2076)。大多数邮件客户端和邮件获取程序似乎使用的是另一种方法,即保留一个已下载邮件的 UID 列表。在获取邮件时,可以将邮件的 UID 与此列表进行比较,以查看它是否已下载。POP3 支持 UIDL 命令来获取所有 UID 列表,但我怀疑 IMAP 库使用的是此命令。我知道唯一会破坏这种解决方法的是使用多个邮件客户端。如果另一个邮件客户端从服务器获取邮件,第一个客户端无法知道它已下载。
-3
simoned at eisa dot net dot au
24 年前
我终于设法让这个函数起作用了。以下是一些可能对某些人有帮助的代码。

$headers = imap_headers($link);
for($x=0; $x < count($headers); $x++) {
$id = substr($headers[$x],5,4);
imap_setflag_full($link,imap_uid($link,$id),'\\SEEN',SE_UID);
}

祝你好运。
-5
todsah at arise dot nl
23 年前
根据 RFC,POP3 不支持这些标记,除了可能支持已删除标记。我还没有尝试过已删除标记在 POP3 上是否有效。
-8
calmdown at abendstille dot at
21 年前
imap_setflag_full 函数可以与 pop3 一起使用,只要连接未关闭。如果你执行

imap_setflag_full($mbox, imap_uid($mbox, 0), "\\Seen \\Flagged", ST_UID);

print_r( imap_headerinfo($mbox, 0) );

你可以看到标志已设置,但是如果你使用另一个脚本再次调用邮箱,标志又会为空。
我在 WinNT (*难看*) 上用 IIS 4.0 和运行的 POP3 服务器以及 PHP 4.3 测试过。
-4
msh at onliners dot dk
22 年前
回复
[email protected]
13-Oct-2000 06:51

pop3 确实支持删除标志 - 我过去一周一直在使用 IMAP 函数连接到 POP3 服务器,幸运的是,它可以工作。
To Top