首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何不下载/上传已经存在的IMAP消息?

如何不下载/上传已经存在的IMAP消息?
EN

Stack Overflow用户
提问于 2019-05-14 13:19:51
回答 1查看 85关注 0票数 0

我有一个带有循环的脚本,可以从一个服务器下载消息并将其上传到另一个服务器。如果消息已经存在于目标中,我不希望浪费对imap_fetchbodyimap_append的调用。有没有什么我可以在"message_not_existing_in_target“中使用的东西?

代码语言:javascript
复制
$source_imap = imap_open(...);
$target_imap = imap_open(...);
...
if (message_not_existing_in_target) {
    $message = imap_fetchbody($source_imap, $i, '', FT_PEEK);
    imap_append($target_imap, $mbox, $message);
}

至少我需要:

代码语言:javascript
复制
$message = imap_fetchbody($source_imap, $i, '', FT_PEEK);
if (message_not_existing_in_target)
    imap_append($target_imap, $mbox, $message);

因为上传往往比下载慢。

我想提一下一些IMAP服务,像Gmail的服务似乎有他们自己的内部重复检查-它们只返回TRUE,而不实际保存重复的消息。但消息需要上传才能被检测为重复,因此效率仍然不高。

EN

回答 1

Stack Overflow用户

发布于 2019-05-14 14:15:57

代码语言:javascript
复制
$sourceImap = imap_open('...');
$targetImap = imap_open('...');

$sourceMessages = $targetMessages = array();

$checkSourceImap = imap_check($sourceImap);
$checkTargetImap = imap_check($targetImap);

if (
    $checkSourceImap !== false &&
    $checkTargetImap !== false
) {
    $sourceImapOverview = imap_fetch_overview($checkSourceImap, "1:{$checkSourceImap->Nmsgs}");
    $targetImapOverview = imap_fetch_overview($checkTargetImap, "1:{$checkTargetImap->Nmsgs}");

    foreach ($sourceImapOverview as $sourceMessage) {
        $sourceMessages[$sourceMessage->msgno] = strtolower(urlencode($sourceMessage->subject) . '_' . urlencode($sourceMessage->from) . '_' . urlencode($sourceMessage->to)) . '_' . $sourceMessage->udate;
    }

    foreach ($targetImapOverview as $targetMessage) {
        $targetMessages[$targetMessage->msgno] = strtolower(urlencode($targetMessage->subject) . '_' . urlencode($targetMessage->from) . '_' . urlencode($targetMessage->to)) . '_' . $targetMessage->udate;
    }

    $newMessages = array_diff($sourceMessages, $targetMessages);

    if (!empty($newMessages)) {
        foreach ($newMessages as $messageNumber => $newMessage) {
            $message = imap_fetchbody($sourceImap, $messageNumber, '', FT_PEEK);
            imap_append($targetImap, $checkTargetImap->Mailbox, $message);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56123475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档