簡體   English   中英

python IMAPlib 如何將沒有 UID 的電子郵件移動到子文件夾中

[英]python IMAPlib how to move emails with no UIDs into sub folders

我正在使用以下方法將電子郵件移動到子文件夾中,但是在某些情況下這會崩潰,因為我被告知某些電子郵件沒有 UID。 有沒有其他方法可以在不使用 UID 的情況下將電子郵件移動到子文件夾中?

def parse_uid(self, data):
    match = pattern_uid.match(data)
    return match.group('uid')

在哪里

pattern_uid = re.compile('\d+ \(UID (?P<uid>\d+)\)')

這樣調用:

resp, data = self.m.fetch(str(self.i), "(UID)")
msg_uid = self.parse_uid(data[0].decode())

self.i 是給定 email 的 integer id。

目的是使用 msg_uid 復制消息,如下所示:

result = self.m.uid('COPY', msg_uid, 'Inbox/VALORISATIONS/KGI')
print("Result:", result[0])
if result[0] == 'OK':
    mov, data = self.m.uid('STORE', msg_uid, '+FLAGS', '(\Deleted)')
    self.m.expunge()
    print("Mail moved to subfolder")

這為某些提供商(Allianz、Metzler、KGI、Mitsubishi)提供了以下錯誤消息:

Traceback (most recent call last):
  File "AutomatePDP_IMAP.py", line 3283, in <module>
    GestionBoitePDP.get_mail_deal_with_it(skipgetpasswords = None)
  File "AutomatePDP_IMAP.py", line 3264, in get_mail_deal_with_it
    msg_uid = self.parse_uid(data[0].decode())
  File "AutomatePDP_IMAP.py", line 111, in parse_uid
    return match.group('uid')
AttributeError: 'NoneType' object has no attribute 'group'

在parse_uid function中添加如下條件:

def parse_uid(self, data):
    match = pattern_uid.match(data)
    if match is not None:
        return match.group('uid')
    else:
        return "UID NA"

然后使用:

if msg_uid != "UID NA":
    result = self.m.uid('COPY', msg_uid,'Inbox/VALORISATIONS/ALAHLI')
    print("Result:", result[0])
    if result[0] == 'OK':
        mov, data = self.m.uid('STORE', msg_uid, '+FLAGS', '(\Deleted)')
        self.m.expunge()
        print("Mail moved to subfolder")

我聽從了 Max 的建議,從循環中刪除了 self.m.expunge() 並在循環之后添加了它。

問題解決了。

我聽從了 Max 的建議,從循環中刪除了 self.m.expunge() 並在循環之后添加了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM