From b6a3bcb4ca37c0f476ee275c2c583ab605df1b3c Mon Sep 17 00:00:00 2001 From: Emmet Cassidy Date: Fri, 26 Jun 2026 11:37:05 +0100 Subject: [PATCH] Add a script to send two files by email. --- environment_template.sh | 3 +- second_file_to_send_by_email.docx | Bin 0 -> 7173 bytes send_file_by_email.py | 3 +- send_multiple_files_by_email.py | 52 ++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 second_file_to_send_by_email.docx create mode 100755 send_multiple_files_by_email.py diff --git a/environment_template.sh b/environment_template.sh index 7eb9680..3df23ad 100644 --- a/environment_template.sh +++ b/environment_template.sh @@ -4,4 +4,5 @@ export FUNCTIONAL_TESTS_API_HOST='' export MMG_INBOUND_SMS_USERNAME= # 'username' value for Development config in notifications-api export MMG_INBOUND_SMS_AUTH='' # 'testkey' value for Development config in notifications-api export SERVICE_API_KEY='' -export SEND_FILE_BY_EMAIL_TEMPLATE_ID='' +export SEND_SINGLE_FILE_BY_EMAIL_TEMPLATE_ID='' +export SEND_TWO_FILES_BY_EMAIL_TEMPLATE_ID='' diff --git a/second_file_to_send_by_email.docx b/second_file_to_send_by_email.docx new file mode 100644 index 0000000000000000000000000000000000000000..bfc50143a7ecd61d204d31dc180de785cebaea28 GIT binary patch literal 7173 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 literal 0 HcmV?d00001 diff --git a/send_file_by_email.py b/send_file_by_email.py index ac17488..88e2362 100755 --- a/send_file_by_email.py +++ b/send_file_by_email.py @@ -6,6 +6,7 @@ from notifications_python_client.notifications import NotificationsAPIClient from notifications_python_client import prepare_upload +# Before this will work, you need to enable "Send files by email", on your service, under "settings". def send_file_by_email(): if len(sys.argv) == 1: @@ -15,7 +16,7 @@ def send_file_by_email(): email_address= sys.argv[1] api_key = os.environ["SERVICE_API_KEY"] api_host = os.environ["FUNCTIONAL_TESTS_API_HOST"] - send_file_by_email_template_id = os.environ["SEND_FILE_BY_EMAIL_TEMPLATE_ID"] + send_file_by_email_template_id = os.environ["SEND_SINGLE_FILE_BY_EMAIL_TEMPLATE_ID"] notifications_client = NotificationsAPIClient(api_key, base_url=api_host) diff --git a/send_multiple_files_by_email.py b/send_multiple_files_by_email.py new file mode 100755 index 0000000..7596444 --- /dev/null +++ b/send_multiple_files_by_email.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 + +import os +import sys + +from notifications_python_client.notifications import NotificationsAPIClient +from notifications_python_client import prepare_upload + +# Before this will work, you need to enable "Send files by email", on your service, under "settings". + +def send_multiple_files_by_email(): + if len(sys.argv) < 4: + print('Error: Incorrect number of arguments') + print('Usage: python send_multiple_files_by_email.py email@example.com file1 file2') + sys.exit(1) + + email_address = sys.argv[1] + file_1 = sys.argv[2] + file_2 = sys.argv[3] + api_key = os.environ["SERVICE_API_KEY"] + api_host = os.environ["FUNCTIONAL_TESTS_API_HOST"] + send_file_by_email_template_id = os.environ["SEND_TWO_FILES_BY_EMAIL_TEMPLATE_ID"] + + notifications_client = NotificationsAPIClient(api_key, base_url=api_host) + + files_to_send = [file_1, file_2] + + personalisation_data = {} + + for index, file_path in enumerate(files_to_send, start=1): + print(file_path) + if os.path.exists(file_path): + with open(file_path, 'rb') as f: + # Creates keys like "link_to_file_1", "link_to_file_2" which need to be in the template. + placeholder_key = f"link_to_file_{index}" + personalisation_data[placeholder_key] = prepare_upload(f) + else: + print(f"Warning: {file_path} not found. Skipping.") + + if personalisation_data: + response = notifications_client.send_email_notification( + email_address=email_address, + template_id=send_file_by_email_template_id, + personalisation=personalisation_data + ) + print(response) + else: + print("Error: No files were successfully prepared. Email not sent.") + + +if __name__ == "__main__": + send_multiple_files_by_email()