From f99b76a2442060ec60656afe85e7b524d9118f50 Mon Sep 17 00:00:00 2001 From: Lei PAN Date: Fri, 25 Nov 2022 17:26:00 +0100 Subject: [PATCH] can check email address validation --- src/db/mongo_manager.py | 10 +++++ src/mail/mail_address_validator.py | 63 ++++++++++++++++++++++++++++++ src/mail/mail_confirmation.py | 10 ++--- src/mail/mail_constants.py | 9 +++++ src/mail/mail_reader.py | 9 +---- 5 files changed, 87 insertions(+), 14 deletions(-) create mode 100644 src/mail/mail_address_validator.py create mode 100644 src/mail/mail_constants.py diff --git a/src/db/mongo_manager.py b/src/db/mongo_manager.py index a42d3a3..eff817e 100644 --- a/src/db/mongo_manager.py +++ b/src/db/mongo_manager.py @@ -18,6 +18,7 @@ BLACK_LIST = "BLACK_LIST" ACCEPTED_APPOINTMENT_LIST = "ACCEPTED_APPOINTMENT_LIST" EMAIL_LIST = "EMAIL_LIST" DESTINATION_EMAIL_LIST = "DESTINATION_EMAIL_LIST" +INVALID_EMAIL_LIST = "INVALID_EMAIL_LIST" class MongoDbManager: @@ -38,6 +39,15 @@ class MongoDbManager: except Exception as Error: self.logger.info(Error) + def insert_invalid_mail(self, email: MailAddress): + try: + collection_to_use = self.db[INVALID_EMAIL_LIST] + collection_to_use.replace_one(filter={'_id': email.mail, }, replacement=email.to_firestore_dict(), + upsert=True) + except Exception as Error: + self.logger.info(Error) + print(Error) + def save_destinary_emails(self, email: MailAddress): try: collection_to_use = self.db[DESTINATION_EMAIL_LIST] diff --git a/src/mail/mail_address_validator.py b/src/mail/mail_address_validator.py new file mode 100644 index 0000000..d6aeb74 --- /dev/null +++ b/src/mail/mail_address_validator.py @@ -0,0 +1,63 @@ +import imaplib +from concurrent.futures.thread import ThreadPoolExecutor + +from src.db.mongo_manager import MONGO_STORE_MANAGER +from src.mail.mail_constants import DOMAIN_163, DOMAIN_YAHOO, DOMAIN_SINA, IMAP_SERVER_163, YAHOO_IMAP_SERVER, \ + IMAP_SERVER_SINA, AOL_IMAP_SERVER +from src.pojo.mail.mail_pojo import MailAddress + + +class MailAddressValidator(): + def __init__(self, login, password): + self.login = login + self.password = password + + @staticmethod + def show_folders(imap): + for i in imap.list()[1]: + l = i.decode().split(' "/" ') + print(l[0] + " = " + l[1]) + + def create_imap(self): + # create an IMAP4 class with SSL + if DOMAIN_163 in self.login: + imap = imaplib.IMAP4_SSL(IMAP_SERVER_163) + elif DOMAIN_YAHOO in self.login: + imap = imaplib.IMAP4_SSL(YAHOO_IMAP_SERVER) + elif DOMAIN_SINA in self.login: + imap = imaplib.IMAP4_SSL(IMAP_SERVER_SINA) + else: + imap = imaplib.IMAP4_SSL(AOL_IMAP_SERVER) + return imap + + def is_valid_email_address(self) -> bool: + # authenticate + imap = self.create_imap() + isValid = True + try: + type, dat = imap.login(self.login, self.password) + print("type is " + type) + imap.logout() + except Exception as error: + print(error) + isValid = False + + return isValid + + def check_and_save_to_db(self): + if not self.is_valid_email_address(): + MONGO_STORE_MANAGER.insert_invalid_mail(MailAddress(self.login, self.password)) + print("{} is not valid".format(self.login)) + + +if __name__ == '__main__': + # address = "walter_chad1982@yahoo.com" + address = "ricejulie1979@yahoo.com" + # code = "xawbzyduwoquxsre" + code = "eybrvmzdmklizleh" + mail_list = MONGO_STORE_MANAGER.get_destination_emails() + + with ThreadPoolExecutor(max_workers=20) as executor: + for mail in mail_list: + valiator = MailAddressValidator(mail.mail, mail.password) + executor.submit(valiator.check_and_save_to_db) diff --git a/src/mail/mail_confirmation.py b/src/mail/mail_confirmation.py index 49f042e..a80bdc4 100644 --- a/src/mail/mail_confirmation.py +++ b/src/mail/mail_confirmation.py @@ -9,22 +9,18 @@ from builtins import list from src.db.mirgration.migration_tools import migre_accepted_appointment from src.db.mongo_manager import MONGO_STORE_MANAGER +from src.mail.mail_constants import DOMAIN_163, DOMAIN_YAHOO, DOMAIN_SINA, IMAP_SERVER_163, YAHOO_IMAP_SERVER, \ + IMAP_SERVER_SINA, AOL_IMAP_SERVER from src.notification.AcceptedResultPojo import get_accepted_result_from from src.notification.mailer import Mailer from src.pojo.ResultEnum import ResultEnum from src.pojo.mail.mail_pojo import MailPojo, MailAddress -AOL_IMAP_SERVER = "imap.aol.com" -IMAP_SERVER_163 = "imap.163.com" -IMAP_SERVER_SINA = "imap.sina.com" -YAHOO_IMAP_SERVER = "imap.mail.yahoo.com" + CONFIRMATION_SUBJECT_FR = 'Votre rendez-vous est' CONFIRMATION_SUBJECT_EN = 'appointment is confirmed' HERMES_EMAIL = "no-reply@hermes.com" -DOMAIN_YAHOO = "yahoo.com" -DOMAIN_SINA = "sina.com" -DOMAIN_163 = "163.com" date_format = "%d-%b-%Y" # DD-Mon-YYYY e.g., 3-Mar-2014 diff --git a/src/mail/mail_constants.py b/src/mail/mail_constants.py new file mode 100644 index 0000000..590f131 --- /dev/null +++ b/src/mail/mail_constants.py @@ -0,0 +1,9 @@ +DOMAIN_YAHOO = "yahoo.com" +DOMAIN_SINA = "sina.com" + +DOMAIN_163 = "163.com" + +AOL_IMAP_SERVER = "imap.aol.com" +IMAP_SERVER_163 = "imap.163.com" +IMAP_SERVER_SINA = "imap.sina.com" +YAHOO_IMAP_SERVER = "imap.mail.yahoo.com" diff --git a/src/mail/mail_reader.py b/src/mail/mail_reader.py index c4548c2..5fff6ed 100644 --- a/src/mail/mail_reader.py +++ b/src/mail/mail_reader.py @@ -11,24 +11,19 @@ from builtins import list from src import params from src.db.mongo_manager import MONGO_STORE_MANAGER from src.logs.AppLogging import init_logger +from src.mail.mail_constants import DOMAIN_163, DOMAIN_YAHOO, DOMAIN_SINA, IMAP_SERVER_163, YAHOO_IMAP_SERVER, \ + IMAP_SERVER_SINA, AOL_IMAP_SERVER from src.pojo.mail.mail_pojo import MailPojo, MailAddress from src.proxy.proxy_type import ProxyType from src.utils.timeutiles import is_time_between from src.workers.link_validator import LinkValidator from datetime import time -AOL_IMAP_SERVER = "imap.aol.com" -YAHOO_IMAP_SERVER = "imap.mail.yahoo.com" -IMAP_SERVER_163 = "imap.163.com" -IMAP_SERVER_SINA = "imap.sina.com" VALIDATION_URL_SUBJECT_fr = 'Validation de votre demande de rendez-vous' VALIDATION_URL_SUBJECT_EN = 'Please confirm your appointment' VALIDATION_URL_REGEX = """https:\/\/rendezvousparis.hermes.com\/client\/register\/[A-Z0-9]+\/validate.code=[A-Z0-9]+""" HERMES_EMAIL = "no-reply@hermes.com" -DOMAIN_163 = "163.com" -DOMAIN_SINA = "sina.com" -DOMAIN_YAHOO = "yahoo.com" date_format = "%d-%b-%Y" # DD-Mon-YYYY e.g., 3-Mar-2014 REDIRECTION_MAILS = "appointment2022@aol.com, chenpeijun@aol.com,hongjiang176@aol.com,ciyuexie@aol.com"