python/응용

jinja2 template 으로 Html 본문작성 후 이메일 보내기

wefree 2023. 5. 27. 20:29

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)