Python で特定のメールを削除する方法

[ad_1]

こんにちは。 特定の件名のメールを削除したい Python コードがありますが、エラーが発生します。どうすればよいですか?

エラー:

/usr/lib/python3/dist-packages/requests/__init__.py:89: RequestsDependencyWarning: urllib3 (1.26.12) or chardet (3.0.4) doesn't match a supported version!
  warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
Traceback (most recent call last):
  File "__carClicker__.py", line 753, in <module>
    read_TXT_FILE_from_gmail()
  File "__carClicker__.py", line 214, in read_TXT_FILE_from_gmail
    mail.store(mail_ids , '+FLAGS', '(\\Trash)')
  File "/usr/lib/python3.8/imaplib.py", line 842, in store
    typ, dat = self._simple_command('STORE', message_set, command, flags)
  File "/usr/lib/python3.8/imaplib.py", line 1205, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/usr/lib/python3.8/imaplib.py", line 963, in _command
    data = data + b' ' + arg
TypeError: can't concat list to bytes

コードは次のとおりです。

私が試したこと:

パイソン
global FROM_EMAIL , FROM_PWD
    mail = imaplib.IMAP4_SSL(SMTP_SERVER)
    mail.login(FROM_EMAIL , FROM_PWD)
    mail.select('inbox')
    
    data = mail.search(None, 'ALL')
    mail_ids = data[1]
    id_list = mail_ids[0].split()   
    latest_email_id = int(id_list[-1])
    check_last_N_emails = 11
    for e in range(latest_email_id , latest_email_id - check_last_N_emails , -1):
        data = mail.fetch(str(e), '(RFC822)' )
        for response_part in data:
            arr = response_part[0]
            if isinstance(arr, tuple):
                msg = email.message_from_string(str(arr[1],'utf-8'))
                email_subject = msg['subject']
                email_from = msg['from']

        for part in msg.walk():
            filename__ = part.get_filename()
            if filename__:
                open(PATH_NAME + str(filename__) , "wb").write(part.get_payload(decode=True))
               
        if(not "20 errors occured" in email_subject):
            now = datetime.datetime.now()
            
            if(email_subject == "update" or email_subject == "Update"):
                mail.store(mail_ids , '+FLAGS', '(\\Trash)')

これは関数です。他のことにも使用します。
ここでの間違いは最後のコマンドだと思います。

ご協力いただきありがとうございます。

解決策 2

[Moving the comment to answer with a reference]

個々のメールではなく、store コマンドでリストを渡しているようです。 元のコードの最後の行ではなく、これを試す必要があります。

パイソン
for num in mail_ids.split():   
    mail.store(num, '+FLAGS', '\\Deleted')

参照: Python でメールを削除する方法 – Python コード[^]

ところで、リチャードが指摘したように、依存ライブラリにもバージョンの問題があり、修正することができますが、現在警告が発生しているようであり、エラーの原因ではありません。

[ad_2]

Source link

コメント

タイトルとURLをコピーしました