我想用curl(BashScript,使用curl)从IMAP-Server读取电子邮件。
我的问题是:移动电子邮件后,IMAP服务器不会更新,因此,如果我检查收件箱,IMAP服务器会向我显示包含在INBOX中的旧邮件数量。
要清除我的问题,这里有一些例子 - 代码:
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
}
现在移动电子邮件后,我等待邮件移动,但似乎是一个无限循环。现在有趣的部分:如果我通过我的webmailer手动查看邮件,循环结束,邮件逐个移动(我有一个循环,所以所有的邮件应该在其他文件夹中排序)。
如果我通过网络邮件程序检查它,IMAP只会移动邮件,但如果我不检查它,则不会这样做。这应该是自动化的,所以,任何人都可以向我解释,为什么会发生这种情况以及我能做些什么呢?
答案 0 :(得分:0)
在有人发送EXPUNGE
命令之前,消息实际上不会删除。同时,它们只是标记为已删除的消息。其他客户端或网络邮件系统已发送EXPUNGE
,这就是您看到更改的原因。
此行为的原因是处理EXPUNGE
时邮件序列号将更改:当邮件从邮箱中删除时,邮件4将变为邮件3,邮件5将变为邮件4,并且等等。它还允许用户可能取消删除邮件。
您可能希望等到完成所有邮件移动操作,然后调用expunge,这样您的邮件序列号就不会发生变化。