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:
		
							parent
							
								
									a916322c30
								
							
						
					
					
						commit
						4dbca8c421
					
				| @ -70,5 +70,6 @@ email: | ||||
|   smtp_host: {{ smtp_host }} | ||||
|   sender_email: {{ sender_email }} | ||||
|   password: {{ sender_password }} | ||||
|   reply_to_email: {{ reply_to_email }} | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -36,6 +36,7 @@ cert_email: "{{ superuser_email }}" | ||||
| smtp_port: "" | ||||
| smtp_host: "" | ||||
| sender_email: "" | ||||
| reply_to_email: "" | ||||
| sender_password: "" | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -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) | ||||
|  | ||||
| @ -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 }}" | ||||
|  | ||||
| @ -191,6 +191,7 @@ email: | ||||
|   smtp_port: 587 | ||||
|   sender_email: example@example.com | ||||
|   password: password | ||||
|   reply_to_email: example@example.com | ||||
| 
 | ||||
| 
 | ||||
| # Deployment options | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user