Exemple #1
0
def _get_email_message_dtos(server: MailServer, number: Optional[int] = 3) -> List[Tuple[EmailMessageDto, Callable]]:
    pop3_connection = server.connect_to_pop3()
    emails_iter = get_message_iterator(pop3_connection, server.user)
    if number:
        emails = list(islice(emails_iter, number))
    else:
        emails = list(emails_iter)
    # emails = read_last_three_emails(pop3_connection)
    server.quit_pop3_connection()
    return emails
    def handle(self, *args, **options):
        email_user = options.pop("mailbox")
        email_password = options.pop("password")
        dry_run = options.pop("dry_run")

        server = MailServer(
            hostname=settings.EMAIL_HOSTNAME,
            user=email_user,
            password=email_password,
            pop3_port=995,
            smtp_port=587,
        )
        pop3_connection = server.connect_to_pop3()
        self.stdout.write(self.style.SUCCESS(f"Connected to {email_user}"))

        _, mails, _ = pop3_connection.list()
        self.stdout.write(
            self.style.SUCCESS(f"Found {len(mails)} in the inbox"))

        mail_message_ids = [
            get_message_id(pop3_connection,
                           m.decode(settings.DEFAULT_ENCODING)) for m in mails
        ]
        self.stdout.write(
            self.style.SUCCESS(
                f"List of Message-Id and message numbers for existing mails:\n{mail_message_ids}"
            ))

        if dry_run.lower() == "false":
            mailbox_config, _ = models.MailboxConfig.objects.get_or_create(
                username=email_user)

            for message_id, message_num in mail_message_ids:
                if message_id is None:
                    continue

                read_status, _ = models.MailReadStatus.objects.get_or_create(
                    message_id=message_id,
                    message_num=message_num,
                    mailbox=mailbox_config,
                )
                read_status.status = enums.MailReadStatuses.READ
                read_status.save()
                self.stdout.write(
                    self.style.SUCCESS(
                        f"Message-Id {message_id} marked as Read"))