Skip to content

Commit c33b964

Browse files
committed
Switch package from Flask-Mail to Flask-Mailman; Update function send_feedback to new Flask-Mailman syntax; Moved MAIL_SERVER, MAIL_PORT, RECIPIENT to .env; Renamed MAIL_USERNAME to SENDER_EMAIL
1 parent 3c36a9e commit c33b964

File tree

5 files changed

+44
-42
lines changed

5 files changed

+44
-42
lines changed

backend/.env.example

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,8 @@ DB_USE_SSL=false
2323
#DB_PASSWORD=password
2424

2525
# SMTP setup
26-
#MAIL_USERNAME="[email protected]"
27-
#APP_PASSWORD="app_specific_password"
26+
#MAIL_SERVER="smtp.service.com"
27+
#MAIL_PORT=587
28+
#SENDER_EMAIL="[email protected]"
29+
#APP_PASSWORD="app_specific_password"
30+
#RECIPIENT_EMAIL="[email protected]"

backend/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ version = "0.2.0"
44
requires-python = ">=3.12"
55
dependencies = [
66
"flask",
7-
"Flask-Mail",
7+
"flask-mailman",
88
"Flask_Limiter",
99
"xhtml2pdf",
1010
"redis",

backend/tenantfirstaid/app.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from pathlib import Path
22
from flask import Flask, jsonify, session
3-
from flask_mail import Mail
3+
from flask_mailman import Mail
44
from flask_limiter import Limiter
55
from flask_limiter.util import get_remote_address
66
import os
@@ -19,7 +19,6 @@
1919
from .feedback import send_feedback
2020

2121
app = Flask(__name__)
22-
mail = Mail(app)
2322

2423

2524
def build_valkey_uri():
@@ -47,16 +46,14 @@ def build_valkey_uri():
4746
app.config["SESSION_COOKIE_SAMESITE"] = "Lax"
4847

4948
# Configure Flask Mail
50-
app.config.update(
51-
MAIL_SERVER="smtp.gmail.com",
52-
MAIL_PORT=587,
53-
MAIL_USE_TLS=True,
54-
MAIL_USERNAME=os.getenv("MAIL_USERNAME"),
55-
MAIL_PASSWORD=os.getenv("APP_PASSWORD"),
56-
)
57-
58-
mail.init_app(app)
49+
app.config["MAIL_SERVER"] = os.getenv("MAIL_SERVER")
50+
app.config["MAIL_PORT"] = os.getenv("MAIL_PORT")
51+
app.config["MAIL_USE_TLS"] = True
52+
app.config["MAIL_USERNAME"] = os.getenv("SENDER_EMAIL")
53+
app.config["MAIL_PASSWORD"] = os.getenv("APP_PASSWORD")
54+
app.config["MAIL_DEFAULT_SENDER"] = os.getenv("SENDER_EMAIL")
5955

56+
mail = Mail(app)
6057

6158
tenant_session = TenantSession()
6259

backend/tenantfirstaid/feedback.py

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,45 @@
11
from xhtml2pdf import pisa
22
from io import BytesIO
33
from flask import request
4-
from flask_mail import Message
4+
from flask_mailman import EmailMessage
55
import os
6+
from typing import Optional, Tuple
67

78

8-
def convert_html_to_pdf(html_content):
9+
def convert_html_to_pdf(html_content: str) -> Optional[bytes]:
910
pdf_buffer = BytesIO()
1011
pisa_status = pisa.CreatePDF(html_content, dest=pdf_buffer)
1112
if pisa_status.err:
1213
return None
1314
return pdf_buffer.getvalue()
1415

1516

16-
def send_feedback(mail):
17+
def send_feedback() -> Tuple[str, int]:
1718
feedback = request.form.get("feedback")
1819
file = request.files.get("transcript")
1920

2021
if not file:
2122
return "No file provided", 400
2223

23-
html_content = file.read().decode("utf-8")
24-
pdf_data = convert_html_to_pdf(html_content)
25-
if pdf_data is None:
24+
html_content: str = file.read().decode("utf-8")
25+
pdf_content: Optional[bytes] = convert_html_to_pdf(html_content)
26+
if pdf_content is None:
2627
return "PDF conversion failed", 500
2728

28-
msg = Message(
29-
subject="Feedback with Transcript",
30-
sender=os.getenv("MAIL_USERNAME"),
31-
recipients=["[email protected]"],
32-
body=f"User feedback:\n\n{feedback}",
33-
)
34-
msg.attach(
35-
filename="transcript.pdf",
36-
content_type="application/pdf",
37-
data=pdf_data,
38-
)
39-
40-
mail.send(msg)
41-
42-
return "Email sent", 200
29+
try:
30+
msg = EmailMessage(
31+
subject="Feedback with Transcript",
32+
from_email=os.getenv("SENDER_EMAIL"),
33+
to=[os.getenv("RECIPIENT_EMAIL")],
34+
body=f"User feedback:\n\n{feedback}\n\nTranscript is attached below",
35+
)
36+
msg.attach(
37+
"transcript.pdf",
38+
pdf_content,
39+
"application/pdf",
40+
)
41+
42+
msg.send()
43+
return "Message sent", 200
44+
except Exception as e:
45+
return f"Send failed: {str(e)}", 500

backend/uv.lock

Lines changed: 6 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)