Reputation: 33
I need to make to delete all emails from mail server and I have made some code that handles that. But it doesn't work I have tried everything and still not delete it from mail server.
So I need to ask If somebody know what I missing to code so it deletes emails on Plesk/kolab mail system.
My code is
from lib.Enums.status import Status
class Imap:
mailserver = None
port = 993
_conn = ''
def __init__(self, mailserver=None, port=993):
self.mailserver = mailserver
self.port = port
def connect(self):
if self.mailserver is not None:
try:
self._conn = imaplib.IMAP4_SSL(self.mailserver, self.port)
return self
except imaplib.IMAP4 as e:
# TODO: make log
return e.error
return None
# Login
def login(self, username=None, password=None):
if username is not None and password is not None:
try:
self._conn.login(username, password)
return self
except imaplib.IMAP4_SSL.error as e:
# TODO: make log
return Status.FAIL
def get_all_message_new(self):
return self._conn.search(None, "ALL")
def delete_message(self, mail):
# mark the mail as deleted
return self._conn.store(mail, '+FLAGS', '\\Deleted')
# Delete permanently message
def delete_permanently(self):
self._conn.expunge()
EmailHandler:
def delete_emails(self, info_obj):
# Mailserver transfer from
mail_server = Imap(info_obj.url).connect()
mail_server.login(info_obj.username, info_obj.password)
# Get folder list from mail server
directories = mail_server.get_directories()
status, data = mail_server.select('INBOX')
typ, msg_ids = mail_server.get_all_message_new()
for mail in msg_ids[0].decode().split():
# mark the mail as deleted
mov, data = mail_server.delete_message(mail)
print(data)
mail_server.delete_permanently()
mail_server.close()
mail_server.logout()
return Status.SUCCESS
I receive response [OK, [None]]
Do anybody have idea what is missing and I found lot of solutions but it's most working for Gmail. I want to handle all mail servers as possible.
Upvotes: 0
Views: 575
Reputation: 33
Solution for this issue is to make false for readonly instead of true
# Get all raw messages from current directory
def select(self, dir=None,readonly=False):
if dir is not None:
return self._conn.select(dir, readonly)
Upvotes: 1