Python渲染模板发送邮件

2021-09-27  本文已影响0人  _张大云

方式一

from typing import List

import yagmail
from jinja2 import Template

def send_email(
        email_to: List[str],
        title: str,
        html: str,
) -> None:
    yag = yagmail.SMTP(
        host=""smtp.163.com"", user="test@163.com",
        password="PASSWORD"
    )
    response = yag.send(to=email_to, subject=title, contents=html)
    print(f"邮件发送结果: {email_to} {response}")


def send_test_email(email_to: List[str]) -> None:
    project_name = settings.PROJECT_NAME
    subject = f"{project_name} - A important email"
    
    with open("test_email.html") as f:
        tm = Template(f.read())

    msg = tm.render({"project_name": project_name, "email": email_to})

    send_email(
        email_to=email_to,
        title=subject,
        html=msg
    )


if __name__ == '__main__':
    send_test_email(['cloud74521941@163.com', 'cloud_0805@163.com'])

方式二

import emails
from emails.template import JinjaTemplate

def send_email(
        email_to: str,
        subject_template: str = "",
        html_template: str = "",
        environment: Dict[str, Any] = dict({}),
) -> None:
    assert settings.EMAILS_ENABLED, "no provided configuration for email variables"
    message = emails.Message(
        subject=JinjaTemplate(subject_template),
        html=JinjaTemplate(html_template),
        mail_from=(settings.EMAILS_FROM_NAME, settings.EMAILS_FROM_EMAIL),
    )
    smtp_options = {"host": settings.SMTP_HOST, "port": settings.SMTP_PORT}
    if settings.SMTP_TLS:
        smtp_options["tls"] = True
    if settings.SMTP_USER:
        smtp_options["user"] = settings.SMTP_USER
    if settings.SMTP_PASSWORD:
        smtp_options["password"] = settings.SMTP_PASSWORD

    response = message.send(to=email_to, render=environment,
                            smtp=smtp_options)
    logger.info(f"邮件发送结果: {email_to} {response}")


def send_test_email(email_to: str) -> None:
    project_name = settings.PROJECT_NAME
    subject = f"{project_name} - A important email"
    with open(Path(settings.EMAIL_TEMPLATES_DIR) / "test_email.html") as f:
        template_str = f.read()
    send_email(
        email_to=email_to,
        subject_template=subject,
        html_template=template_str,
        environment={"project_name": project_name, "email": email_to}
    )
上一篇下一篇

猜你喜欢

热点阅读