Рубрики
Без рубрики

Автоматизировать ваш компьютер- Удалить электронные письма

Поэтому я столкнулся с действительно раздражающей проблемой на моей работе. У нас есть поддержка авто-электронных писем И они отправляют мне т … Помечено Python, автоматизация, автоматизация, электронная почта.

Поэтому я столкнулся с действительно раздражающей проблемой на моей работе. У нас есть поддержка авто-электронных писем И они отправляют мне много писем.

Что большинство людей сделают в этой ситуации? Сделайте правило, чтобы положить его в другую папку. Итак, теперь у меня 300 000 000 писем их И я не могу ввести в папку, Outlook сокрушает … что нам делать?

Давайте напишем скрипт, который удаляет ваши электронные письма.

Для этого мы будем использовать библиотеку imaplib.

import imaplib

Мы также будем использовать datetime так:

import datetime

Далее нам нужен новый класс ..

class EmailCleaner:
    def deleteEmail(self):
        imap_host = 'imap-mail.outlook.com' # for gmail please use: 'imap.gmail.com'
        mail = imaplib.IMAP4_SSL(imap_host)
        mail.login('your email', 'your password')

Мы создали новый класс под названием «EmailCleaner», внутри мы создаем новый метод под названием «DelaeMail». Следующие 3 строки определяют хост (Outlook в моем примере), открыть SSL-соединение и заготовку входа в систему на свой адрес электронной почты.

После того, как мы вошли в систему, давайте выделим необходимую папку и начните работать на нем. Для этого нам нужно получить имя папки и сколько дней (мой по умолчанию 50), мы хотим пойти бросить.

class EmailCleaner:
    def deleteEmail(self, folderName, daysBack = 50):
        imap_host = 'imap-mail.outlook.com'
        mail = imaplib.IMAP4_SSL(imap_host) 
        mail.login('your email', 'your password')
        mail.select(mailbox=folderName, readonly=False)

        for i in range(0, daysBack):
            date = (datetime.date.today() - datetime.timedelta(i)).strftime("%d-%b-%Y")
            result, data = mail.search(None, '(SENTSINCE {0})'.format(date))

Мы только что выбрали запрошенную папку по электронной почте. Выберите и поставить, потому что мы хотим удалить ее.

По умолчанию мы не можем получить все электронное письмо, но только в партиях (~ 1000), поэтому я создал петлю в дни, и он удалит электронные письма в зависимости от дня. Затем я искал запрошенные электронные письма по дате – «Sentsince». Для других запросов вы можете прочитать здесь: Rfc.

 for num in data[0].split():
     mail.store(num, '+FLAGS', r'(\Deleted)')
     print(f'adding email {num} to remove list...')

Я создал вложенную петлю и пометить каждое электронное письмо с удаленным флагом.

Таким образом, мы сделали логин, выбрали папку и запускаем для цикла в этой папке, получите электронные письма по дате и отметьте их с удаленным флагом, теперь пришло время Удалить электронные письма Отказ

Для удаления электронных писем мы будем использовать это:

mail.expunge()

Давайте проверим весь код (добавил некоторые отпечатки) …

def deleteEmail(self, folderName, daysBack = 50):
    mail = imaplib.IMAP4_SSL(imap_host)
        mail.login('your email', 'your password')

    print("Login success")
    mail.select(mailbox=folderName, readonly=False)

    for i in range(0, daysBack):
        date = (datetime.date.today() - datetime.timedelta(i)).strftime("%d-%b-%Y")
        result, data = mail.search(None, '(SENTSINCE {0})'.format(date))

        for num in data[0].split():
            mail.store(num, '+FLAGS', r'(\Deleted)') #change flag to delete
            print(f'adding email {num} to remove list...')
        mail.expunge() # delete the emails
        print(f'Emails back from day: {i} removed.')
        # close connection and logout
    mail.close()
    mail.logout()

Это почти готово! Теперь давайте добавим попробуйте \ Cast теперь обрабатывать исключения.

    def deleteEmail(self, folderName, daysBack = 50):
        try:
            mail = imaplib.IMAP4_SSL(imap_host)
            mail.login('your email', 'your password')

            print("Login success")
            mail.select(mailbox=folderName, readonly=False)

            for i in range(0, daysBack):
                date = (datetime.date.today() - datetime.timedelta(i)).strftime("%d-%b-%Y")
                result, data = mail.search(None, '(SENTSINCE {0})'.format(date))

                for num in data[0].split():
                    mail.store(num, '+FLAGS', r'(\Deleted)')
                    print(f'adding email {num} to remove list...')
                mail.expunge()
                print(f'Emails back from day: {i} removed.')
            mail.close()
            mail.logout()
        except Exception as e:
            raise Exception(f'Unable to delete emails, e.')

Если вы хотите запустить его через консоль, вы можете добавить консольный интерфейс с огнем. Вы можете изменить мой пост, как реализовать это: Автоматически генерировать интерфейсы командной строки

* Наслаждаться:) *

Оригинал: “https://dev.to/roybs2/automate-your-computer-remove-emails-1lb1”