Use logo1.png in emails, inline mail_style.css, attach summary as MD
This commit is contained in:
@@ -4,71 +4,15 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Error Notification</title>
|
<title>Error Notification</title>
|
||||||
<link rel="stylesheet" type="text/css" href="{css_path}">
|
|
||||||
<style>
|
<style>
|
||||||
body {{
|
{email_css}
|
||||||
font-family: Arial, sans-serif;
|
|
||||||
line-height: 1.5;
|
|
||||||
background-color: #ffffff;
|
|
||||||
color: #333;
|
|
||||||
margin: 0;
|
|
||||||
padding: 20px;
|
|
||||||
}}
|
|
||||||
.container {{
|
|
||||||
width: 100%;
|
|
||||||
max-width: 600px;
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 20px;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
}}
|
|
||||||
h1 {{
|
|
||||||
font-size: 1.5em;
|
|
||||||
margin-top: 0;
|
|
||||||
}}
|
|
||||||
p {{
|
|
||||||
margin: 10px 0;
|
|
||||||
font-size: 1em;
|
|
||||||
}}
|
|
||||||
.error-message, .success-message {{
|
|
||||||
padding: 10px 0;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
font-size: 1em;
|
|
||||||
}}
|
|
||||||
.error-message {{
|
|
||||||
color: #721c24;
|
|
||||||
}}
|
|
||||||
.success-message {{
|
|
||||||
color: #7C6DA0;
|
|
||||||
}}
|
|
||||||
.contact {{
|
|
||||||
margin-top: 15px;
|
|
||||||
font-size: 1em;
|
|
||||||
color: #333;
|
|
||||||
}}
|
|
||||||
.contact a {{
|
|
||||||
color: #0056b3;
|
|
||||||
text-decoration: none;
|
|
||||||
}}
|
|
||||||
.contact a:hover {{
|
|
||||||
text-decoration: underline;
|
|
||||||
}}
|
|
||||||
.disclaimer {{
|
|
||||||
margin-top: 20px;
|
|
||||||
font-size: 1em;
|
|
||||||
color: #333;
|
|
||||||
}}
|
|
||||||
.signature {{
|
|
||||||
margin-top: 20px;
|
|
||||||
font-size: 1em;
|
|
||||||
color: #333;
|
|
||||||
}}
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1 style="color: #7C6DA0;">Error Notification</h1>
|
{email_logo}
|
||||||
<p>Dear user:</p>
|
<h1>Error Notification</h1>
|
||||||
|
<p>Dear user,</p>
|
||||||
<p>An error occurred while processing your audio file. This means that something went wrong during the processing of your file, and it could not be completed successfully.</p>
|
<p>An error occurred while processing your audio file. This means that something went wrong during the processing of your file, and it could not be completed successfully.</p>
|
||||||
<p class="error-message">Error details: {exception}</p>
|
<p class="error-message">Error details: {exception}</p>
|
||||||
<p>Please check the file and try again. If the problem persists, our support team is here to help.</p>
|
<p>Please check the file and try again. If the problem persists, our support team is here to help.</p>
|
||||||
@@ -78,10 +22,10 @@
|
|||||||
<div class="disclaimer">
|
<div class="disclaimer">
|
||||||
<p>Please note that our support team does not have the ability to fix processing errors directly or access the files you have uploaded. They can provide guidance and help troubleshoot any issues you may encounter.</p>
|
<p>Please note that our support team does not have the ability to fix processing errors directly or access the files you have uploaded. They can provide guidance and help troubleshoot any issues you may encounter.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="signature">
|
<div class="signature">
|
||||||
<p>Thank you for using our transcription service!</p>
|
<p>Thank you for using our transcription service!</p>
|
||||||
<p>A.P.Strom</p>
|
<p>A.P.Strom</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -4,71 +4,15 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Transcript Ready</title>
|
<title>Transcript Ready</title>
|
||||||
<link rel="stylesheet" type="text/css" href="{css_path}">
|
|
||||||
<style>
|
<style>
|
||||||
body {{
|
{email_css}
|
||||||
font-family: Arial, sans-serif;
|
|
||||||
line-height: 1.5;
|
|
||||||
background-color: #ffffff;
|
|
||||||
color: #333;
|
|
||||||
margin: 0;
|
|
||||||
padding: 20px;
|
|
||||||
}}
|
|
||||||
.container {{
|
|
||||||
width: 100%;
|
|
||||||
max-width: 600px;
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 20px;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
}}
|
|
||||||
h1 {{
|
|
||||||
font-size: 1.5em;
|
|
||||||
margin-top: 0;
|
|
||||||
}}
|
|
||||||
p {{
|
|
||||||
margin: 10px 0;
|
|
||||||
font-size: 1em;
|
|
||||||
}}
|
|
||||||
.error-message, .success-message {{
|
|
||||||
padding: 10px 0;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
font-size: 1em;
|
|
||||||
}}
|
|
||||||
.error-message {{
|
|
||||||
color: #721c24;
|
|
||||||
}}
|
|
||||||
.success-message {{
|
|
||||||
color: #7C6DA0;
|
|
||||||
}}
|
|
||||||
.contact {{
|
|
||||||
margin-top: 15px;
|
|
||||||
font-size: 1em;
|
|
||||||
color: #333;
|
|
||||||
}}
|
|
||||||
.contact a {{
|
|
||||||
color: #0056b3;
|
|
||||||
text-decoration: none;
|
|
||||||
}}
|
|
||||||
.contact a:hover {{
|
|
||||||
text-decoration: underline;
|
|
||||||
}}
|
|
||||||
.disclaimer {{
|
|
||||||
margin-top: 20px;
|
|
||||||
font-size: 1em;
|
|
||||||
color: #333;
|
|
||||||
}}
|
|
||||||
.signature {{
|
|
||||||
margin-top: 20px;
|
|
||||||
font-size: 1em;
|
|
||||||
color: #333;
|
|
||||||
}}
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1 style="color: #7C6DA0;">Transcript Ready</h1>
|
{email_logo}
|
||||||
<p>Dear user:</p>
|
<h1>Transcript Ready</h1>
|
||||||
|
<p>Dear user,</p>
|
||||||
<p>Your file has been successfully processed, and the transcript is now ready. The transcript of your audio or video file is attached to this email.</p>
|
<p>Your file has been successfully processed, and the transcript is now ready. The transcript of your audio or video file is attached to this email.</p>
|
||||||
<p>We hope you find the transcript useful. If you have any questions or need further assistance, please do not hesitate to contact our support team.</p>
|
<p>We hope you find the transcript useful. If you have any questions or need further assistance, please do not hesitate to contact our support team.</p>
|
||||||
<div class="contact">
|
<div class="contact">
|
||||||
|
|||||||
@@ -5,69 +5,14 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Upload Successful</title>
|
<title>Upload Successful</title>
|
||||||
<style>
|
<style>
|
||||||
body {{
|
{email_css}
|
||||||
font-family: Arial, sans-serif;
|
|
||||||
line-height: 1.5;
|
|
||||||
background-color: #ffffff;
|
|
||||||
color: #333;
|
|
||||||
margin: 0;
|
|
||||||
padding: 20px;
|
|
||||||
}}
|
|
||||||
.container {{
|
|
||||||
width: 100%;
|
|
||||||
max-width: 600px;
|
|
||||||
margin: 0 auto;
|
|
||||||
padding: 20px;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
}}
|
|
||||||
h1 {{
|
|
||||||
font-size: 1.5em;
|
|
||||||
margin-top: 0;
|
|
||||||
}}
|
|
||||||
p {{
|
|
||||||
margin: 10px 0;
|
|
||||||
font-size: 1em;
|
|
||||||
}}
|
|
||||||
.error-message, .success-message {{
|
|
||||||
padding: 10px 0;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
font-size: 1em;
|
|
||||||
}}
|
|
||||||
.error-message {{
|
|
||||||
color: #721c24;
|
|
||||||
}}
|
|
||||||
.success-message {{
|
|
||||||
color: #7C6DA0;
|
|
||||||
}}
|
|
||||||
.contact {{
|
|
||||||
margin-top: 15px;
|
|
||||||
font-size: 1em;
|
|
||||||
color: #333;
|
|
||||||
}}
|
|
||||||
.contact a {{
|
|
||||||
color: #0056b3;
|
|
||||||
text-decoration: none;
|
|
||||||
}}
|
|
||||||
.contact a:hover {{
|
|
||||||
text-decoration: underline;
|
|
||||||
}}
|
|
||||||
.disclaimer {{
|
|
||||||
margin-top: 20px;
|
|
||||||
font-size: 1em;
|
|
||||||
color: #333;
|
|
||||||
}}
|
|
||||||
.signature {{
|
|
||||||
margin-top: 20px;
|
|
||||||
font-size: 1em;
|
|
||||||
color: #333;
|
|
||||||
}}
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1 style="color: #7C6DA0;">Upload Successful</h1>
|
{email_logo}
|
||||||
<p>Dear user:</p>
|
<h1>Upload Successful</h1>
|
||||||
|
<p>Dear user,</p>
|
||||||
<p>Your file has been successfully uploaded and is now in our processing queue. This means that our system has received your file, and it is waiting to be processed. We will handle your file as soon as possible.</p>
|
<p>Your file has been successfully uploaded and is now in our processing queue. This means that our system has received your file, and it is waiting to be processed. We will handle your file as soon as possible.</p>
|
||||||
<p class="success-message">Your current position in the queue is: {queue_position}. This is the order in which your file will be processed. We appreciate your patience as we work through the queue.</p>
|
<p class="success-message">Your current position in the queue is: {queue_position}. This is the order in which your file will be processed. We appreciate your patience as we work through the queue.</p>
|
||||||
<p>We will notify you once your file has been processed. If you have any urgent needs or further questions, feel free to reach out to our support team.</p>
|
<p>We will notify you once your file has been processed. If you have any urgent needs or further questions, feel free to reach out to our support team.</p>
|
||||||
|
|||||||
+39
-4
@@ -7,6 +7,7 @@ Supports both plain text and HTML email bodies.
|
|||||||
Template placeholders are primarily filled via environment variables.
|
Template placeholders are primarily filled via environment variables.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import base64
|
||||||
import os
|
import os
|
||||||
import smtplib
|
import smtplib
|
||||||
import logging
|
import logging
|
||||||
@@ -53,6 +54,33 @@ def get_email_config():
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _load_css(path: str) -> str:
|
||||||
|
"""
|
||||||
|
Load CSS file content if it exists.
|
||||||
|
"""
|
||||||
|
if not path or not os.path.exists(path):
|
||||||
|
return ""
|
||||||
|
with open(path, "r", encoding="utf-8") as f:
|
||||||
|
return f.read()
|
||||||
|
|
||||||
|
|
||||||
|
def _logo1_inline_html() -> str:
|
||||||
|
"""
|
||||||
|
Return an inline <img> tag for logo1.png as base64.
|
||||||
|
Falls back to empty string if not found.
|
||||||
|
"""
|
||||||
|
logo_path = os.getenv("EMAIL_LOGO_PATH", "/app/src/misc/logo1.png")
|
||||||
|
if not os.path.exists(logo_path):
|
||||||
|
return ""
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(logo_path, "rb") as f:
|
||||||
|
b64 = base64.b64encode(f.read()).decode("utf-8")
|
||||||
|
return f'<img src="data:image/png;base64,{b64}" alt="A.P.Strom" style="max-width:180px; display:block; margin:0 auto 10px auto;"/>'
|
||||||
|
except Exception:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
def build_template_context(**runtime_kwargs: Any) -> Dict[str, Any]:
|
def build_template_context(**runtime_kwargs: Any) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Build a context dict for templates from:
|
Build a context dict for templates from:
|
||||||
@@ -61,13 +89,20 @@ def build_template_context(**runtime_kwargs: Any) -> Dict[str, Any]:
|
|||||||
|
|
||||||
Environment variables:
|
Environment variables:
|
||||||
- EMAIL_CONTACT_ADDRESS: value for {contact_email}
|
- EMAIL_CONTACT_ADDRESS: value for {contact_email}
|
||||||
- EMAIL_CSS_PATH: value for {css_path}
|
- EMAIL_CSS_PATH: path to mail_style.css (optional; we inline it)
|
||||||
|
- EMAIL_LOGO_PATH: path to logo1.png (default: /app/src/misc/logo1.png)
|
||||||
Runtime kwargs are merged on top (e.g. queue_position, exception).
|
|
||||||
"""
|
"""
|
||||||
|
# Load and inline mail_style.css for consistent email styling
|
||||||
|
css_path = os.getenv("EMAIL_CSS_PATH", "/app/src/misc/mail_style.css")
|
||||||
|
css_text = _load_css(css_path)
|
||||||
|
|
||||||
|
# Build inline logo HTML
|
||||||
|
logo_html = _logo1_inline_html()
|
||||||
|
|
||||||
ctx: Dict[str, Any] = {
|
ctx: Dict[str, Any] = {
|
||||||
"contact_email": os.getenv("EMAIL_CONTACT_ADDRESS", "support@example.com"),
|
"contact_email": os.getenv("EMAIL_CONTACT_ADDRESS", "support@example.com"),
|
||||||
"css_path": os.getenv("EMAIL_CSS_PATH", ""),
|
"email_css": css_text,
|
||||||
|
"email_logo": logo_html,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Runtime values override env if provided
|
# Runtime values override env if provided
|
||||||
|
|||||||
+11
-3
@@ -39,7 +39,7 @@ def get_queue_position(task_id: str) -> int:
|
|||||||
def send_initial_email(to: str, queue_pos: int):
|
def send_initial_email(to: str, queue_pos: int):
|
||||||
"""
|
"""
|
||||||
Send initial confirmation email with queue position using HTML template.
|
Send initial confirmation email with queue position using HTML template.
|
||||||
Static placeholders (contact_email, css_path) come from env via load_template.
|
Static placeholders (contact_email, css, logo) come from env via load_template.
|
||||||
"""
|
"""
|
||||||
subject = "ScrAIbe: Your transcription request has been received"
|
subject = "ScrAIbe: Your transcription request has been received"
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ def send_success_email(
|
|||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Send final email with transcript and attachments using HTML template.
|
Send final email with transcript and attachments using HTML template.
|
||||||
Static placeholders (contact_email, css_path) come from env via load_template.
|
Static placeholders (contact_email, css, logo) come from env via load_template.
|
||||||
"""
|
"""
|
||||||
subject = "ScrAIbe: Your transcript is ready"
|
subject = "ScrAIbe: Your transcript is ready"
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ def send_success_email(
|
|||||||
def send_error_email(to: str, error_message: str, task_id: str):
|
def send_error_email(to: str, error_message: str, task_id: str):
|
||||||
"""
|
"""
|
||||||
Send error notification email using HTML template.
|
Send error notification email using HTML template.
|
||||||
Static placeholders (contact_email, css_path) come from env via load_template.
|
Static placeholders (contact_email, css, logo) come from env via load_template.
|
||||||
"""
|
"""
|
||||||
subject = "ScrAIbe: Error with your transcription request"
|
subject = "ScrAIbe: Error with your transcription request"
|
||||||
|
|
||||||
@@ -271,6 +271,14 @@ def process_transcription_task(
|
|||||||
json.dump(json_data, f, indent=2, ensure_ascii=False)
|
json.dump(json_data, f, indent=2, ensure_ascii=False)
|
||||||
attachments.append(json_path)
|
attachments.append(json_path)
|
||||||
|
|
||||||
|
# MD summary (only when summary is available)
|
||||||
|
if summary_text:
|
||||||
|
md_path = tempfile.mktemp(suffix=".md")
|
||||||
|
with open(md_path, "w", encoding="utf-8") as f:
|
||||||
|
f.write("# Summary\n\n")
|
||||||
|
f.write(summary_text)
|
||||||
|
attachments.append(md_path)
|
||||||
|
|
||||||
# 5) Send success email
|
# 5) Send success email
|
||||||
send_success_email(
|
send_success_email(
|
||||||
to=email_to,
|
to=email_to,
|
||||||
|
|||||||
Reference in New Issue
Block a user