【发布时间】: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。)这就是它不会自动发生的原因。
-
你解决了我的问题!谢谢!
-
我会添加作为答案。