need to test read confirmation mails

This commit is contained in:
2026-03-29 19:13:20 +02:00
parent 9802848c5f
commit e8b0a4aae9
2 changed files with 141 additions and 38 deletions
+40 -25
View File
@@ -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)])