4

「\Recent」のフラグが付いたメールをチェックして、IMAPClient(Python)を使用してメールサーバーからメールを取得しています。電子メールが読み取られた後、電子メールサーバーは自動的に電子メールフラグを「\Seen」に設定します。

私がやりたいのは、電子メールフラグを「\最近」にリセットして、サーバー上で直接電子メールをチェックすると、未読として表示されるようにすることです。

IMAPClientの「set_flag」定義を使用して「\Recent」フラグを電子メールに追加しようとすると、IMAPClientが例外をスローしていることがわかりました。他のフラグを追加すると正常に機能します。

IMAPClientのドキュメントには、最近のフラグは読み取り専用であると記載されていますが、電子メールを未読としてマークする方法がまだあるかどうか疑問に思いました。

私の理解では、Thunderbirdのような電子メールソフトウェアを使用すると、電子メールを未読として設定できるので、それを行う方法が必要だと思います。

ありがとう。

4

4 に答える 4

5

完全を期すために、IMAPClientを使用した実際の例を次に示します。\ Seenフラグは、メッセージが既読または未読としてマークされるかどうかを制御するために更新されます。

from imapclient import IMAPClient, SEEN

client = IMAPClient(...)
client.select_folder('INBOX')
msg_ids = client.search(...)

# Mark messages as read
client.add_flags(msg_ids, [SEEN])

# Mark messages as unread
client.remove_flags(msg_ids, [SEEN])

後者はフラグを指定されたものだけにリセットするため、の代わりにadd_flagsとが使用されることに注意してください。既読/未読ステータスを設定する場合、通常、他のメッセージフラグはそのままにしておきます。remove_flagsset_flags

またfetch、「BODY.PEEK」データ項目を使用して呼び出し、\Seenフラグに影響を与えることなくメッセージの一部を取得できることにも注意してください。これにより、メッセージのダウンロード後に\Seenフラグを修正する必要がなくなります。

詳細については、RFC3501のセクション6.4.5を参照してください。

于 2012-05-08T21:19:11.860 に答える
2

IMAPClientのドキュメントでは、「\Recent」フラグは読み取り専用であると具体的に述べられています。

http://imapclient.readthedocs.org/en/latest/#message-flags

これはおそらくIMAPおよびIMAPサーバーの機能(または制限)です。(つまり、おそらくIMAPClientの制限ではありません)。

'\ Seen'フラグを使用して、未読のものをマークします。

于 2014-01-30T14:02:15.580 に答える
1

免責事項:私はIMAPに精通していますが、Python-IMAPClientには精通していません。

通常、「seen」フラグは、電子メールの要約を通常どおりに表示するか太字で表示するかを決定します。表示されたフラグをリセットできるはずです。ただし、最近のフラグは直接制御できない場合があります。新しいメッセージの到着に気付いた場合、imapサーバーはそれを設定します。

于 2012-01-30T03:29:12.260 に答える
0

@メンノスミッツ:

メールを解析した後、メールに「\Seen」フラグを追加する際に問題が発生します。特定のテキストが含まれている場合にのみ、メールを既読としてマークしたい。

上記の「client.add_flags(msg_ids、[SEEN])」を使用してadd_flagsを使用しようとしましたが、ストアが失敗し続けます:無効な状態でコマンドを受信しました[SEEN]に正確に何が入りますか(これはちょうどプレースホルダーまたは正確な構文?)

これが私のコードの一部です:

#login and authentication
context=ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
iobj=imapclient.IMAPClient('outlook.office365.com', ssl=True,ssl_context=context)
iobj.login(uname,pwd)
iobj.select_folder('INBOX', readonly=True)
unread=iobj.search('UNSEEN')
print('There are: ',len(unread),' UNREAD emails')
for i in unread:
  mail=iobj.fetch(i,['BODY[]'])
  mail_body=html2text.html2text(mcontent.html_part.get_payload().decode(mcontent.html_part.charset))
  ##Do some regex to parse the email to check if it contains text
  meter_no=(re.findall(r'\nACCOUNT NUMBER: (\d+)', mail_body))
  req_type=(re.findall(r'Complaint:..+?\n(.+)\n', mail_body))
  if 'Key Change' in req_type:
        if meter_no in kct['Account_no'].values:
            print 'Going to sendmail'# Call a function                                              
            sending_email(meter_no,subject,phone_no,req_type,)              
            mail[b'FLAGS']=r'b\Seen'+','+''+r'b\Answered'##Trying to manuaally alter the flag but didn't work##
            iobj.add_flags(i,br'\Seen')# Didn't work too  (but is 'i' my msg_id??)
            iobj.add_flags(i,[SEEN]) # Complains Name SEEN not defined

        else: print 'KCT is yet to be generated'
于 2017-10-20T09:24:11.953 に答える