【问题标题】:IMAP does not update it's Folder statusIMAP 不更新其文件夹状态
【发布时间】:2017-03-23 13:55:06
【问题描述】:

我想使用 curl(使用 curl 的 BashScript)从 IMAP 服务器读取电子邮件。

我的问题是:移动电子邮件后,IMAP 服务器没有更新,因此,如果我检查收件箱,IMAP 服务器会向我显示收件箱中包含的旧邮件数量。

为了解决我的问题,这里有一些示例代码:

function delete_mail_id() {
     curl --insecure \
          --url "${SERVER}/INBOX" \
          --user "${USER}:${PASSWD}" \
          -X "STORE ${1} +Flags \Deleted" 1>/dev/null 2>/dev/null
}
function copy_mail_id_to() {
    curl --insecure \
         --url "${SERVER}/INBOX;UID=${1}" \
         --user "${USER}:${PASSWD}" \
         -X "COPY ${1} INBOX/${2}" 1>/dev/null 2>/dev/null
}
function move_mail_id_to() {
    copy_mail_id_to "${1}" "${2}"
    delete_mail_id "${1}"
}
function wait_for_mail_move(){
    TEMP=$( tempfile )
    while true; do
        fetch_first_mail > $TEMP
        if [ "$( grep 'Message-ID:' $TEMP )" != "${1}" ]; then
            break
        else
            sleep 1
        fi
    done
    rm $TEMP
}

现在移动电子邮件后,我等待邮件移动,但这似乎是一个无限循环。现在有趣的部分:如果我通过我的网络邮件程序手动查看邮件,循环结束并且邮件被一个接一个地移动(我有一个循环,所以所有邮件都应该在其他文件夹中排序)。

不知何故,如果我通过网络邮件程序检查,IMAP 只会移动邮件,但如果我不检查它,它就不会移动。这应该是自动化的,所以,谁能向我解释一下为什么会发生这种情况以及我能做些什么?

【问题讨论】:

  • 你打电话给删除了吗?在调用 expunge 之前不会删除邮件。
  • 发送“EXPUNGE”命令?大概用 -X 就像你调用其他命令一样。但是在完成之前不要调用它,因为删除消息会导致所有 ID 发生变化(当消息 3 被删除时,消息 4 变为 3。)这就是它不会自动发生的原因。
  • 你解决了我的问题!谢谢!
  • 我会添加作为答案。

标签: curl imap


【解决方案1】:

在有人发送EXPUNGE 命令之前,消息不会真正删除。同时,它们只是被标记为已删除的消息。其他客户端或网络邮件系统已发送EXPUNGE,这就是您看到更改的原因。

出现这种行为的原因是处理EXPUNGE时消息序列号会发生变化:当消息3从邮箱中删除时,消息4将变为消息3,消息5将变为消息4,以此类推.它还允许用户潜在地取消删除消息。

您可能希望等到完成所有消息移动操作后,再调用 expunge,这样您的消息序列号就不会在您不期望的时候发生变化。

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2014-09-20
    • 1970-01-01
    • 2021-11-17
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多