diff --git a/ansible/group_vars/do/do-values.template.yaml b/ansible/group_vars/do/do-values.template.yaml index 7f477b60..e4f3ffa3 100644 --- a/ansible/group_vars/do/do-values.template.yaml +++ b/ansible/group_vars/do/do-values.template.yaml @@ -70,5 +70,6 @@ email: smtp_host: {{ smtp_host }} sender_email: {{ sender_email }} password: {{ sender_password }} + reply_to_email: {{ reply_to_email }} diff --git a/ansible/group_vars/do/main.yml b/ansible/group_vars/do/main.yml index 0e6d3e24..a475ee12 100644 --- a/ansible/group_vars/do/main.yml +++ b/ansible/group_vars/do/main.yml @@ -36,6 +36,7 @@ cert_email: "{{ superuser_email }}" smtp_port: "" smtp_host: "" sender_email: "" +reply_to_email: "" sender_password: "" diff --git a/backend/btrixcloud/emailsender.py b/backend/btrixcloud/emailsender.py index ddd6fe42..a1797583 100644 --- a/backend/btrixcloud/emailsender.py +++ b/backend/btrixcloud/emailsender.py @@ -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) diff --git a/chart/templates/secrets.yaml b/chart/templates/secrets.yaml index cc24b9d6..5dbfcb6f 100644 --- a/chart/templates/secrets.yaml +++ b/chart/templates/secrets.yaml @@ -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 }}" diff --git a/chart/values.yaml b/chart/values.yaml index 4392d01e..eee6dce4 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -191,6 +191,7 @@ email: smtp_port: 587 sender_email: example@example.com password: password + reply_to_email: example@example.com # Deployment options