Do not set messages as seen at search/fetch time

Prevents exception between fetch and ack loosing the ack.
In cases of transient problems, the ack will be sent on the
next pass.
This commit is contained in:
Maximilian Friedersdorff 2019-12-12 20:47:42 +00:00
parent d97754876a
commit 901762f178

View file

@ -29,11 +29,11 @@ def empty_reply(msg):
def list_reminders(person, client): def list_reminders(person, client):
persons_messages = client.fetch( persons_messages = client.fetch(
client.search(["FROM", person]), "RFC822" client.search(["FROM", person]), "BODY.PEEK[]"
) )
reminders = [] reminders = []
for uid, reminder in persons_messages.items(): for uid, reminder in persons_messages.items():
reminder = email.message_from_bytes(reminder[b"RFC822"]) reminder = email.message_from_bytes(reminder[b"BODY[]"])
reminders.append( reminders.append(
f"({uid}) {reminder['Subject']}: {reminder.get_payload().strip()}" f"({uid}) {reminder['Subject']}: {reminder.get_payload().strip()}"
) )
@ -41,7 +41,8 @@ def list_reminders(person, client):
def ack_message(uid, message, client): def ack_message(uid, message, client):
msg = email.message_from_bytes(message[b"RFC822"]) print(message)
msg = email.message_from_bytes(message[b"BODY[]"])
if msg.is_multipart(): if msg.is_multipart():
print("Deleting multipart message") print("Deleting multipart message")
return None, True return None, True
@ -88,7 +89,7 @@ def main():
sclient.login(user, passwd) sclient.login(user, passwd)
iclient.select_folder("INBOX") iclient.select_folder("INBOX")
unseen_msgs = iclient.fetch(iclient.search(["UNSEEN"]), 'RFC822') unseen_msgs = iclient.fetch(iclient.search(["UNSEEN"]), "BODY.PEEK[]")
for uid, message in unseen_msgs.items(): for uid, message in unseen_msgs.items():
print(uid) print(uid)
reply, delete = ack_message(uid, message, iclient) reply, delete = ack_message(uid, message, iclient)