templates/result.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Report</title>
</head>
<body>
<!-- email 로 발송되기 때문에 header 에 css 정의를 하면 적용이 안되는 듯? -->
<table style='width: 100%; border: 1px solid black; border-collapse: collapse;'>
{% for item in items %}
<tr style='border: 1px solid black;'>
<td style='border: 1px solid black; padding: 7px'>{{ item.name }}</td>
<td style='border: 1px solid black; padding: 7px'>{{ item.value }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
main.py
import smtplib
from datetime import datetime
from email.mime.text import MIMEText
from typing import List
import jinja2
template_loader = jinja2.FileSystemLoader(searchpath="/home/user/app/templates", encoding="utf-8")
template_env = jinja2.Environment(loader=template_loader, autoescape=True)
def make_html_content(title, request_time, url) -> str:
template = template_env.get_template('result.html')
items = [
{'name': '제목', 'value': title},
{'name': '시작 시간', 'value': request_time}
]
return template.render(items=items, url=url)
def send_html_email(sender_email: str, receiver_emails: List[str], subject: str, content: str) -> None:
if receiver_emails:
with smtplib.SMTP("backendsmtp.mycompany.com", 25) as server:
msg = MIMEText(content, 'html')
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = ','.join(receiver_emails)
server.send_message(msg)
if __name__ == '__main__':
html = make_html_content('메일 제목', datetime.now(), 'http://www.google.com')
print(html)
# send_html_email(..., content=html)