diff options
| author | stuppie | 2026-09-08 16:02:08 -0600 |
|---|---|---|
| committer | stuppie | 2026-09-08 16:02:08 -0600 |
| commit | f3e37a1c73bd0d68966f24995011b5c93305273d (patch) | |
| tree | a53f3658af3498b707fcabefb48168a464551374 /jb/managers | |
| parent | 27c2e8fee5c604d64cd06a37afc62db0252f8370 (diff) | |
| download | amt-jb-f3e37a1c73bd0d68966f24995011b5c93305273d.tar.gz amt-jb-f3e37a1c73bd0d68966f24995011b5c93305273d.zip | |
email integration
Diffstat (limited to 'jb/managers')
| -rw-r--r-- | jb/managers/email_manager.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/jb/managers/email_manager.py b/jb/managers/email_manager.py new file mode 100644 index 0000000..dcbe167 --- /dev/null +++ b/jb/managers/email_manager.py @@ -0,0 +1,57 @@ +import requests + +from jb.config import settings + +MAUTIC_BASE_URL = "https://mail.jamesbillings67.com" +EMAIL_TEMPLATE_ID = 1 +auth_headers = {"Authorization": f"Basic {settings.mautic_api_key.get_secret_value()}"} + + +def get_or_create_contact(email: str, amt_worker_id: str | None = None): + # amt_worker_id = "A2Z2FRA128FNW" + body = {"email": email} + if amt_worker_id: + body["amt_worker_id"] = amt_worker_id + res = requests.post( + url=f"{MAUTIC_BASE_URL}/api/contacts/new", + json=body, + headers=auth_headers, + ).json() + contact_id = res["contact"]["id"] + return contact_id + + +def send_login_email_from_url(mautic_url, magic_link) -> None: + email_tokens = { + "magic_link": magic_link, + } + body = {"tokens": email_tokens} + response = requests.post(url=mautic_url, json=body, headers=auth_headers) + try: + response.raise_for_status() + except requests.exceptions.HTTPError: + print(f"Failed to send email. Status code: {response.status_code}") + print(response.text) + raise + d = response.json() + assert d.get("success"), f"Failed to send email: {d.get('failed')}" + print("Email sent successfully") + + +def send_login_email(email: str, magic_token: str): + contact_id = get_or_create_contact(email=email) + mautic_url = ( + f"{MAUTIC_BASE_URL}/api/emails/{EMAIL_TEMPLATE_ID}/contact/{contact_id}/send" + ) + magic_link = f"{settings.base_url}auth/magic-link/?token={magic_token}" + return send_login_email_from_url(mautic_url, magic_link) + + +def send_amt_link_email(email: str, magic_token: str): + # don't actually associate the email with the worker ID until they click the link + contact_id = get_or_create_contact(email=email) + mautic_url = ( + f"{MAUTIC_BASE_URL}/api/emails/{EMAIL_TEMPLATE_ID}/contact/{contact_id}/send" + ) + magic_link = f"{settings.base_url}auth/link-amt/?token={magic_token}" + return send_login_email_from_url(mautic_url, magic_link) |
