From 6b391c52227000d4b1c2928c8047a2101e9ddc53 Mon Sep 17 00:00:00 2001 From: cyril Date: Tue, 10 Aug 2021 10:14:35 +0200 Subject: [PATCH] Handle letter options --- html_template/mail.html | 22 ++++++------ src/email_sender.py | 77 +++++++++++++++++++++++++++++------------ src/event.py | 2 ++ 3 files changed, 68 insertions(+), 33 deletions(-) diff --git a/html_template/mail.html b/html_template/mail.html index 09386ab..926c2e2 100644 --- a/html_template/mail.html +++ b/html_template/mail.html @@ -1,7 +1,7 @@ - Paturlettre + {GENEALETTER_NAME} @@ -93,7 +93,7 @@ padding: 3px 5px 0px; font-weight: 400; font-size: 110%; - color: #229027; + color: {GENEALETTER_MAIN_COLOR}; } /* ANDROID CENTER FIX */ @@ -102,16 +102,16 @@ } - +
- Paturlettre + {GENEALETTER_NAME}
- - - - - diff --git a/src/email_sender.py b/src/email_sender.py index e261924..0346cee 100644 --- a/src/email_sender.py +++ b/src/email_sender.py @@ -27,6 +27,30 @@ class DataPaths: return self._members_path +class LetterOptions: + def __init__(self, name, response_email, logo_url, hex_main_color, hex_second_color): + self._name = name + self._response_email = response_email + self._logo_url = logo_url + self._main_color = hex_main_color + self._second_color = hex_second_color + + def name(self): + return self._name + + def response_email(self): + return self._response_email + + def logo_url(self): + return self._logo_url + + def main_color_hex(self): + return self._main_color + + def secondary_color_hex(self): + return self._second_color + + class Mailer: def __init__(self, server, user, password): self._server = server @@ -44,24 +68,25 @@ class Mailer: class EmailSender: - def __init__(self, mailer: Mailer, paths: DataPaths, receiver: str): + def __init__(self, mailer: Mailer, paths: DataPaths, receiver: str, letter: LetterOptions): self._mailer = mailer self._paths = paths self._receiver = receiver + self._letter = letter print("Email Sender is set up") - def send_paturlettre(self): + def send_genealetter(self): msg = MIMEMultipart('alternative') - msg['Subject'] = f'[Paturlettre] Semaine {get_week_number_and_span()[0]}' - msg['From'] = 'Paturlettre ' - msg['To'] = 'Diffusion Paturlettre ' - msg.preamble = f'La Paturlettre de la semaine {get_week_number_and_span()[0]} !' + msg['Subject'] = f'[{self._letter.name()}] Semaine {get_week_number_and_span()[0]}' + msg['From'] = f'{self._letter.name()} <{self._letter.response_email()}>' + msg['To'] = f'Diffusion {self._letter.name()} ' + msg.preamble = f'{self._letter.name()} de la semaine {get_week_number_and_span()[0]} !' print("Msg Header is set up") events_previous, events_current, events_next = get_events(self._paths) - msg.attach(MIMEText(create_plain_email(events_previous, events_current, events_next), + msg.attach(MIMEText(create_plain_email(events_previous, events_current, events_next, self._letter), 'plain')) - msg.attach(MIMEText(create_html_templated(events_previous, events_current, events_next), + msg.attach(MIMEText(create_html_templated(events_previous, events_current, events_next, self._letter), 'html')) print("Msg body is generated") @@ -72,18 +97,21 @@ class EmailSender: try: print("Sending to {}".format(self._receiver)) conn.sendmail(msg['From'], self._receiver, msg.as_string()) - print("Paturlettre has been sent!") + print(f"{self._letter.name()} has been sent!") finally: conn.quit() -def create_html_templated(events_previous, events_current, events_next): +def create_html_templated(events_previous, events_current, events_next, letter: LetterOptions): directory = os.path.dirname(os.path.realpath(__file__)) template_path = os.path.join(directory, '..', 'html_template', 'mail.html') with open(template_path, 'r', encoding='utf-8') as tmp: mail = tmp.read() - mail = mail.replace('{LogoAddress}', - 'http://xerto.free.fr/Paturlettre/LogoLettre.png') + mail = mail.replace('{LogoAddress}', letter.logo_url()) + mail = mail.replace('{GENEALETTER_MAIN_COLOR}', letter.main_color_hex()) + mail = mail.replace('{GENEALETTER_SECOND_COLOR}', letter.secondary_color_hex()) + mail = mail.replace('{GENEALETTER_NAME}', letter.name()) + mail = mail.replace('{GENEALETTER_RESPONSE}', letter.response_email()) wk_and_span = get_week_number_and_span() mail = mail.replace('{Main_Title}', f'Semaine {wk_and_span[0]}') mail = mail.replace('{Sub_Title}', @@ -97,9 +125,9 @@ def create_html_templated(events_previous, events_current, events_next): return mail -def create_plain_email(events_previous, events_current, events_next): +def create_plain_email(events_previous, events_current, events_next, letter: LetterOptions): wk_and_span = get_week_number_and_span() - mail_plain = f'Paturlettre - Semaine {wk_and_span[0]}\n' + mail_plain = f'{letter.name()} - Semaine {wk_and_span[0]}\n' mail_plain += f'du {wk_and_span[1].day} {months[wk_and_span[1].month - 1]}' \ f' au {wk_and_span[2].day} {months[wk_and_span[2].month - 1]}\n' mail_plain += '\n\n' @@ -114,8 +142,8 @@ def create_plain_email(events_previous, events_current, events_next): mail_plain += '\n\n' mail_plain += 'Cet email vous est envoyé par Cyril NOVEL parce que vous êtes inscrit sur la ' \ - 'liste de diffusion de la Paturlettre.\n' - mail_plain += 'Des questions ou des commentaires ? Envoyez un email à paturlettre@kosmon.fr\n' + 'liste de diffusion de {}.\n'.format(letter.name()) + mail_plain += 'Des questions ou des commentaires ? Envoyez un email à {}\n'.format(letter.response_email()) return mail_plain @@ -211,27 +239,32 @@ def get_week_number_and_span(): return today.isocalendar()[1], monday, monday + timedelta(days=6) -def load_config(config_file) -> (Mailer, DataPaths, str): +def load_config(config_file) -> (LetterOptions, Mailer, DataPaths, str): config = configparser.ConfigParser() config.read(config_file, encoding='utf-8') + letter_opts = LetterOptions(config['Letter']['name'], + config['Letter']['response_email'], + config['Letter']['logo_url'], + config['Letter']['color_main'], + config['Letter']['color_second']) mailer = Mailer(config['Mailer']['smtp_server'], config['Mailer']['user'], config['Mailer']['password']) data_path = DataPaths(config['Data']['mariages'], config['Data']['members']) receiver = config['Destination']['receiver'] - return mailer, data_path, receiver + return letter_opts, mailer, data_path, receiver def main(): - parser = ArgumentParser(description='Send Paturlettre mail') + parser = ArgumentParser(description='Send Genealetter mail') parser.add_argument('-c', '--config', dest='config', help='Config file to load') args = parser.parse_args() - mailer, paths, receiver = load_config(args.config) - email_sender = EmailSender(mailer, paths, receiver) - email_sender.send_paturlettre() + letter, mailer, paths, receiver = load_config(args.config) + email_sender = EmailSender(mailer, paths, receiver, letter) + email_sender.send_genealetter() print("Exiting script") diff --git a/src/event.py b/src/event.py index 3aa6e73..9ab7def 100644 --- a/src/event.py +++ b/src/event.py @@ -64,6 +64,8 @@ class Event: return self._current_date.weekday() def type_str(self): + if self._type == 'A': + return 'U' return self._type
+
+
+
+
+

Cet email vous est envoyé par Cyril NOVEL
- parce que vous êtes inscrit sur la liste de diffusion de la Paturlettre.
- Des questions ou des commentaires ? Envoyez un email à Paturlettre. + parce que vous êtes inscrit sur la liste de diffusion de {GENEALETTER_NAME}.
+ Des questions ou des commentaires ? Envoyez un email à {GENEALETTER_NAME}.