亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang IMAP:在兩個不同的文件夾中移動郵件導致“指定的消息集無效”

Golang IMAP:在兩個不同的文件夾中移動郵件導致“指定的消息集無效”

Go
LEATH 2022-12-19 18:15:58
用例:我們有一個郵箱,我們可以在其中接收來自客戶的郵件。在進一步處理之前,我必須檢查它們是否符合協議(主題必須匹配正則表達式,每封郵件只有一個附件等)我有以下申請:import (    "fmt"    "imaptest/src/db"    "io"    "log"    "path/filepath"    "strings"    "github.com/emersion/go-imap"    "github.com/emersion/go-imap/client"    "github.com/emersion/go-message"    "github.com/iglin/go-config")(...)//Channel for the messagesmessages := make(chan *imap.Message, 10)//Channel for retrieve if an error appeareddone := make(chan error, 1)go func() {  seqset := new(imap.SeqSet)  seqset.AddRange(1, mbox.Messages)  //Fetch the messages and push them into the channel  done <- c.Fetch(seqset, []imap.FetchItem{imap.FetchEnvelope, imap.FetchRFC822}, messages)}()//SeqSet for invalid messagesseqsetErrorMessages := new(imap.SeqSet)//SeqSet for valid messagesseqsetValidMessages := new(imap.SeqSet)for msg := range messages {  //Different checks like are there attachments  //Matches the subject with a specific regex  if isMessageValid(msg) {    //Message is valid    seqsetValidMessages.AddNum(msg.SeqNum)  } else {    //Message is invalid    seqsetErrorMessages.AddNum(msg.SeqNum)  }}//Check if there was an error when fetching the messagesif err := <-done; err != nil {  log.Fatal(err)}//Move all invalid messages to errorif !seqsetErrorMessages.Empty() {  if err := c.Move(seqsetErrorMessages, FOLDER_ERROR); err != nil {    log.Fatalf("Error on move to %s: %v", FOLDER_ERROR, err)  }}//Move all valid messages to toExportif !seqsetValidMessages.Empty() {  if err := c.Move(seqsetValidMessages, FOLDER_OUT); err != nil {    log.Fatalf("Error on move to %s: %v", FOLDER_OUT, err)  }}FOLDER_OUT 和 FOLDER_ERROR 是此郵箱中現有文件夾的常量字符串。在源文件夾的所有郵件都有效(或無效)的情況下,一切都很好,所有郵件都被移動了。但是如果我遇到同時存在有效郵件和無效郵件的情況,我會收到以下錯誤:移動到錯誤時出錯:指定的消息集無效。我還嘗試使用“msg.Uid”和“c.UidMove()”代替“msg.Seqnum”和“c.Move()”,但這會導致相同的結果。這怎么能解決?
查看完整描述

1 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

使用 UID 是此處的正確答案,但請確保您有 UID?!?,4,9”作為 MSN 集和 UID 集均有效,但兩者不可互換。您不能從服務器請求 MSN 集,然后將其與 UID 命令一起使用。

如果郵箱中恰好有兩封郵件,并且您想將其中第一封移至 FOLDER_ERROR,將第二封移至 FOLDER_OUT,那么您看到的問題很容易解釋。您發送一條命令“將郵箱中的第一條消息移至 FOLDER_ERROR”,服務器會執行此操作。然后你發送“將郵箱中的第二條消息移至 FOLDER_OUT”,服務器告訴你“此郵箱中只有一條消息,沒有我可以移動的第二條消息”。

使用 UID 可以解決這個問題,因為它們是穩定的。無論您移動了哪些其他消息,消息都會保留其 UID。


查看完整回答
反對 回復 2022-12-19
  • 1 回答
  • 0 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號