email sending tweaks: (#470)

- support 'reply-to' email field in values, and in ansible-based values
- set 'subject' for different types of messages
This commit is contained in:
Ilya Kreymer 2023-01-12 23:25:23 -08:00 committed by GitHub
parent a916322c30
commit 4dbca8c421
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 6 deletions

View File

@ -70,5 +70,6 @@ email:
smtp_host: {{ smtp_host }}
sender_email: {{ sender_email }}
password: {{ sender_password }}
reply_to_email: {{ reply_to_email }}

View File

@ -36,6 +36,7 @@ cert_email: "{{ superuser_email }}"
smtp_port: ""
smtp_host: ""
sender_email: ""
reply_to_email: ""
sender_password: ""

View File

@ -4,6 +4,7 @@ import os
import smtplib
import ssl
from email.message import EmailMessage
# pylint: disable=too-few-public-methods
class EmailSender:
@ -12,11 +13,12 @@ class EmailSender:
def __init__(self):
self.sender = os.environ.get("EMAIL_SENDER")
self.password = os.environ.get("EMAIL_PASSWORD")
self.reply_to = os.environ.get("EMAIL_REPLY_TO") or self.sender
self.smtp_server = os.environ.get("EMAIL_SMTP_HOST")
self.default_origin = os.environ.get("APP_ORIGIN")
def _send_encrypted(self, receiver, message):
def _send_encrypted(self, receiver, subject, message):
"""Send Encrypted SMTP Message"""
print(message, flush=True)
@ -24,13 +26,21 @@ class EmailSender:
print("Email: No SMTP Server, not sending", flush=True)
return
msg = EmailMessage()
msg["Subject"] = subject
msg["From"] = self.reply_to
msg["To"] = receiver
msg["Reply-To"] = msg["From"]
msg.set_content(message)
context = ssl.create_default_context()
with smtplib.SMTP(self.smtp_server, 587) as server:
server.ehlo() # Can be omitted
server.starttls(context=context)
server.ehlo() # Can be omitted
server.login(self.sender, self.password)
server.sendmail(self.sender, receiver, message)
server.send_message(msg)
# server.sendmail(self.sender, receiver, message)
def get_origin(self, headers):
"""Return origin of the received request"""
@ -56,7 +66,11 @@ You can verify by clicking here: {origin}/verify?token={token}
The verification token is: {token}"""
self._send_encrypted(receiver_email, message)
self._send_encrypted(
receiver_email,
"Welcome to Browsertrix Cloud, Verify your Registration",
message,
)
# pylint: disable=too-many-arguments
def send_new_user_invite(
@ -73,7 +87,11 @@ You can join by clicking here: {origin}/join/{token}?email={receiver_email}
The invite token is: {token}"""
self._send_encrypted(receiver_email, message)
self._send_encrypted(
receiver_email,
f'You\'ve been invited to join "{archive_name}" on Browsertrix Cloud',
message,
)
# pylint: disable=too-many-arguments
def send_existing_user_invite(
@ -89,7 +107,11 @@ You can join by clicking here: {origin}/invite/accept/{token}?email={receiver_em
The invite token is: {token}"""
self._send_encrypted(receiver_email, message)
self._send_encrypted(
receiver_email,
f'You\'ve been invited to join "{archive_name}" on Browsertrix Cloud',
message,
)
def send_user_forgot_password(self, receiver_email, token, headers=None):
"""Send password reset email with token"""
@ -100,4 +122,4 @@ We received your password reset request. Please click here: {origin}/reset-passw
to create a new password
"""
self._send_encrypted(receiver_email, message)
self._send_encrypted(receiver_email, "Password Reset", message)

View File

@ -21,6 +21,7 @@ stringData:
EMAIL_SMTP_PORT: "{{ .Values.email.smtp_port }}"
EMAIL_SMTP_HOST: "{{ .Values.email.smtp_host }}"
EMAIL_SENDER: "{{ .Values.email.sender_email }}"
EMAIL_REPLY_TO: "{{ .Values.email.reply_to }}"
EMAIL_PASSWORD: "{{ .Values.email.password }}"
SUPERUSER_EMAIL: "{{ .Values.superuser.email }}"

View File

@ -191,6 +191,7 @@ email:
smtp_port: 587
sender_email: example@example.com
password: password
reply_to_email: example@example.com
# Deployment options