php - 如何将邮件从 Gmail 收件箱移动到标签?

标签 php gmail gmail-imap

我正在尝试使用以下代码将邮件从收件箱移到已处理标签中:

$inbox = imap_open($host,$user,$pass) or die('Error: ' . imap_last_error());

if( $emails = imap_search($inbox,'ALL') )
{
    foreach($emails as $email_number) {
        imap_mail_move($inbox, $email_number, 'Processed') or die('Error');
    }

}
imap_expunge($inbox);
imap_close($inbox);

不幸的是,虽然邮件带有“已处理”标签,但它们仍留在收件箱中。

我怎样才能让他们离开收件箱?

最佳答案

实际上...电子邮件留在收件箱中的原因是当 imap_mail_move 执行此操作时,所有剩余邮件的 ID 都减一,因此当 foreach 循环移动到下一封邮件时,一封邮件被留下了。这会跳过每次迭代都会重复的消息。这就是 imap_mail_move 似乎不起作用的原因。

解决方案是使用唯一的消息 UID 而不是可能重复的 ID:

$inbox  = imap_open( $host, $user, $pass );
$emails = imap_search( $inbox, 'ALL', SE_UID );

if( $emails ) {
    foreach( $emails as $email_uid ) {
        imap_mail_move($inbox, $email_uid, 'processed', CP_UID);
    }
}

关于php - 如何将邮件从 Gmail 收件箱移动到标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8278017/

相关文章:

Java邮件API : Accessing "All Mail" folder of GMAIL mailbox

php - 在现有文件中写入数据 Yii2 框架

javascript - 如何为 Gmail 制作稳定的书签

c# - Ae.Net.Mail - IMAP - 仅获取未见过的邮件

html - 如何在电子邮件中嵌入网络表单

GMail IMAP - 如何获取对话(线程)列表?

c# - TCPClient 连接到 Gmail 但未收到第一条消息

php - 如何使用 MySQL 和 PHP 从与父类别关联的页面创建指向子类别的链接

javascript - 调用特定函数时加载响应数据失败

php - 如何将表单值(某些具有相同名称)插入到多个 MySQL 行