2016-11-09 8 views
0

IMAP-Serverからcurl(curlを使用しているBashScript)を使って電子メールを読みたいと思います。IMAPはフォルダの状態を更新しません

私の問題は:電子メールを移動した後、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 
} 

今、私は移動するためのメールを待って、無限ループであるように思わEメールを移動した後。今、面白い部分:私は私のwebmailerを介して手作業でメールを見ると、ループが終了し、メールが1つずつ移動します(ループがあるので、すべてのメールは他のフォルダでソートする必要があります)。

どういうわけかIMAPは私がウェブメールを介してチェックするとメールを移動するだけですが、チェックしないとメールは移動しません。これは自動化されているはずですので、誰も私に説明することができます、なぜこれが起こっているのか、私はそれについて何ができるのですか?

+0

あなたはexpungeを呼び出しましたか?メールは、削除が呼び出されるまで削除されません。 – Max

+0

ありがとう!試してみます! –

+0

'EXPUNGE'コマンドを送信しますか?他のコマンドを呼び出すような-Xでおそらく。ただし、EXPUNGEメッセージはすべてのIDをシフトさせるので(メッセージ3が削除されると、メッセージ4は3になります)、完了するまでそれを呼び出さないでください。これが自動的には発生しないのはこのためです。 – Max

答えて

0

誰かがEXPUNGEコマンドを送信するまで、メッセージは実際には削除されません。その間、削除されたメッセージとしてマークされます。他のクライアントまたはウェブメールシステムからEXPUNGEが送信されたため、変更が表示されます。

EXPUNGEが処理されると、メッセージシーケンス番号が変更されます。メッセージ3がメールボックスから消去されると、メッセージ4はメッセージ3になり、メッセージ5はメッセージ4になります。また、ユーザーはメッセージを元に戻すことができます。

メッセージの移動操作をすべて完了してからコールを終了するまで待つことをお勧めします。予想外のときにメッセージシーケンス番号が変更されることはありません。

関連する問題