need to test read confirmation mails
This commit is contained in:
@@ -1,23 +1,22 @@
|
||||
import datetime
|
||||
import email
|
||||
import logging
|
||||
import sys
|
||||
from builtins import list
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from email.header import decode_header
|
||||
from email.message import Message
|
||||
|
||||
import sys
|
||||
from builtins import list
|
||||
from imapclient import IMAPClient
|
||||
|
||||
from src.db.mirgration.migration_tools import migre_accepted_appointment
|
||||
from src.db.mongo_manager import MONGO_STORE_MANAGER
|
||||
from src.mail.imap_proxy_reader import ProxyMailReader, MailAccount, ProxyConfig
|
||||
from src.mail.mail_constants import create_imap, show_folders, is_gmx_address
|
||||
from src.mail.mail_reader import get_gmx_proxy_config
|
||||
from src.mail.imap_proxy_reader import ProxyMailReader, MailAccount, ProxyConfig
|
||||
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
|
||||
from src.pojo.mail.mail_pojo import MailPojo
|
||||
|
||||
CONFIRMATION_SUBJECT_FR = 'Votre=20rendez-vous=20est=20confirm=C3'
|
||||
CONFIRMATION_SUBJECT_EN = 'confirmed'
|
||||
@@ -28,9 +27,15 @@ date_format = "%d-%b-%Y" # DD-Mon-YYYY e.g., 3-Mar-2014
|
||||
FRENCH_CONFIRMED_MESSAGE = "Nous aurons le plaisir de vous accueillir"
|
||||
|
||||
|
||||
def read_gmx_proxy_confirmation_emails(mail, mails_messages: list, proxy_config: ProxyConfig) -> None:
|
||||
def read_gmx_proxy_confirmation_emails(
|
||||
mail,
|
||||
mails_messages: list,
|
||||
proxy_config: ProxyConfig,
|
||||
subjects: list = None,
|
||||
) -> None:
|
||||
account = MailAccount(login=mail.mail, password=mail.password)
|
||||
results = ProxyMailReader(account, proxy_config).read(since=datetime.datetime.today())
|
||||
reader = ProxyMailReader(account, proxy_config, subjects=subjects)
|
||||
results = reader.read(since=datetime.datetime.today())
|
||||
for result in results:
|
||||
mail_pojo = MailPojo(subject=result.subject, body=result.body, from_address=result.from_address)
|
||||
mail_pojo.mail_address = mail.mail
|
||||
@@ -160,22 +165,28 @@ def accept_appointment_found(accepted_result_list: list):
|
||||
_all_contact_list = MONGO_STORE_MANAGER.get_all_contact_to_book_list()
|
||||
_all_register_account = MONGO_STORE_MANAGER.get_all_registered_users()
|
||||
mailer = Mailer()
|
||||
# sginal = SignalSender()
|
||||
print(accepted_result_list)
|
||||
for reserve in accepted_result_list:
|
||||
result = get_accepted_result_from(reserve, MONGO_STORE_MANAGER, _all_contact_list)
|
||||
for user in _all_register_account:
|
||||
if user.mail == result.email:
|
||||
result.account_password = user.password
|
||||
mailer.send_email(result, to_all=False)
|
||||
MONGO_STORE_MANAGER.update_reserve_result(reserve.id, ResultEnum.ACCEPTED, reserve.message)
|
||||
# sginal.send_result(result)
|
||||
# mailer.send_email(result, to_all=False)
|
||||
# MONGO_STORE_MANAGER.update_reserve_result(reserve.id, ResultEnum.ACCEPTED, reserve.message)
|
||||
|
||||
if len(accepted_result_list) > 0:
|
||||
migre_accepted_appointment(str(datetime.date.today()))
|
||||
|
||||
|
||||
def find_confirmation_contacts_for_today():
|
||||
def find_confirmation_contacts_for_today(mode: str = 'default'):
|
||||
"""
|
||||
Retourne la liste des boîtes mail à scanner pour aujourd'hui.
|
||||
|
||||
Modes disponibles :
|
||||
- 'default' : comportement habituel (exclut les adresses outlook.com)
|
||||
- 'all' : toutes les adresses liées aux rendez-vous du jour (y compris outlook)
|
||||
- 'gmx_only' : uniquement les adresses GMX liées aux rendez-vous du jour
|
||||
"""
|
||||
_all_mail_list = MONGO_STORE_MANAGER.get_destination_emails()
|
||||
_all_appointments_today = MONGO_STORE_MANAGER.get_all_successful_items_for_day()
|
||||
if len(_all_appointments_today) == 0:
|
||||
@@ -184,24 +195,28 @@ def find_confirmation_contacts_for_today():
|
||||
for _item in _all_appointments_today:
|
||||
for _mail in _all_mail_list:
|
||||
if _mail.mail == _item.mail:
|
||||
# do not need to scan outlook
|
||||
if "outlook.com" not in _mail.mail:
|
||||
# if _item.url_validated is True:
|
||||
if mode == 'all':
|
||||
_mail_list_to_scan.append(_mail)
|
||||
elif mode == 'gmx_only':
|
||||
if is_gmx_address(_mail.mail):
|
||||
_mail_list_to_scan.append(_mail)
|
||||
else: # 'default'
|
||||
# do not need to scan outlook
|
||||
if "outlook.com" not in _mail.mail:
|
||||
_mail_list_to_scan.append(_mail)
|
||||
break
|
||||
print("Found {} emails to scan".format(len(_mail_list_to_scan)))
|
||||
print("Found {} emails to scan (mode={})".format(len(_mail_list_to_scan), mode))
|
||||
return _mail_list_to_scan
|
||||
|
||||
|
||||
def find_confirmation_contacts_mail_list(mail_list):
|
||||
mail_list.append(MailAddress("saigecong1990@pissmail.com", "cvExXKOP8oY1D@"))
|
||||
def find_confirmation_contacts_mail_list(mail_list, subjects: list = None):
|
||||
mails_messages = []
|
||||
gmx_proxy_config = get_gmx_proxy_config()
|
||||
# read all the emails
|
||||
with ThreadPoolExecutor(max_workers=200) as executor:
|
||||
for mail in mail_list:
|
||||
if is_gmx_address(mail.mail) and gmx_proxy_config is not None:
|
||||
executor.submit(read_gmx_proxy_confirmation_emails, mail, mails_messages, gmx_proxy_config)
|
||||
executor.submit(read_gmx_proxy_confirmation_emails, mail, mails_messages, gmx_proxy_config, subjects)
|
||||
else:
|
||||
mail_reader = MailConfirmationReader(mail.mail, mail.password)
|
||||
executor.submit(mail_reader.read_emails, mails_messages)
|
||||
@@ -210,7 +225,7 @@ def find_confirmation_contacts_mail_list(mail_list):
|
||||
successful_items = MONGO_STORE_MANAGER.get_all_successful_items_for_day()
|
||||
# check the hours
|
||||
current_hour = datetime.datetime.now().hour
|
||||
if current_hour < 15:
|
||||
if current_hour < 22:
|
||||
# add yesterday's appointment only for morning
|
||||
successful_items.extend(MONGO_STORE_MANAGER.get_all_successful_items_for_yesterday())
|
||||
for mail in mails_messages:
|
||||
@@ -238,12 +253,12 @@ def find_confirmation_contacts_mail_list(mail_list):
|
||||
return accepted_appointment_list
|
||||
|
||||
|
||||
def read_mails_and_find_confirmation_contacts(all_mails=False):
|
||||
def read_mails_and_find_confirmation_contacts(all_mails=False, mode: str = 'default', subjects: list = None):
|
||||
if all_mails:
|
||||
mail_list = MONGO_STORE_MANAGER.get_destination_emails()
|
||||
else:
|
||||
mail_list = find_confirmation_contacts_for_today()
|
||||
return find_confirmation_contacts_mail_list(mail_list)
|
||||
mail_list = find_confirmation_contacts_for_today(mode=mode)
|
||||
return find_confirmation_contacts_mail_list(mail_list, subjects=subjects)
|
||||
|
||||
|
||||
# init_logger()
|
||||
@@ -252,8 +267,8 @@ logger.addHandler(logging.StreamHandler(stream=sys.stdout))
|
||||
# check whether the url has already been clicked
|
||||
if __name__ == '__main__':
|
||||
# read_mails_and_find_confirmation_contacts()
|
||||
_mail_list_today = find_confirmation_contacts_for_today()
|
||||
_mail_list_today = find_confirmation_contacts_for_today(mode="gmx_only")
|
||||
# print("size is {}".format(len(_mail_list_today)))
|
||||
find_confirmation_contacts_mail_list(_mail_list_today)
|
||||
find_confirmation_contacts_mail_list(_mail_list_today, subjects=[CONFIRMATION_SUBJECT_FR, CONFIRMATION_SUBJECT_EN])
|
||||
# _items = MONGO_STORE_MANAGER.get_all_successful_items_for_day()
|
||||
# accept_appointment_found([random.choice(_items)])
|
||||
|
||||
Reference in New Issue
Block a user