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):
persons_messages = client.fetch(
client.search(["FROM", person]), "RFC822"
client.search(["FROM", person]), "BODY.PEEK[]"
)
reminders = []
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(
f"({uid}) {reminder['Subject']}: {reminder.get_payload().strip()}"
)
@ -41,7 +41,8 @@ def list_reminders(person, 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():
print("Deleting multipart message")
return None, True
@ -88,7 +89,7 @@ def main():
sclient.login(user, passwd)
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():
print(uid)
reply, delete = ack_message(uid, message, iclient)