Pulsar
Pulsar

Reputation: 33

Imaplib not deleting emails

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

Answers (1)

Pulsar
Pulsar

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

Related Questions