html 如何使用模板在fastapi中发送电子邮件

n6lpvg4x  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(318)
conf = ConnectionConfig(
    USERNAME=config.mail_username,
    PASSWORD=config.mail_pasword,
    FROM=config.mail_from,
    PORT=config.mail_port,
    SERVER=config.mail_server,
    USE_CREDENTIALS=True,
    VALIDATE_CERTS=True,
    TEMPLATE_FOLDER='./templates'
)

async def send_email(email_to: EmailSchema, body:EmailSchema) -> JSONResponse:
    message = MessageSchema(
        subject="fastapi",
        recipients=[email_to],
        body=body,
        subtype="html"
    )

    fm = FastMail(conf)
    
    await fm.send_message(message,template_name='email.html')

data="xyz"
@app.get("/email")
async def endpoint_send_email(
): 
    await send_email(
        email_to=email_to,
        body=data
        )

email.html

<!DOCTYPE html>
<html>
  <head>
  <title>email</title>
  </head>
  <body>
    <h4>Hi Team</h4>
    <p>get the data of date {{date}}</p><br />
    {{body.data}}
    <br /><br />
    <h4>thanks,</h4>
    <h4>Team</h4>
  </body>
</html>

当我尝试不使用template_name发送电子邮件时,它使用正文值发送xyz(纯文本)
我需要发送此模板格式,如果我使用模板名称,我得到下面的错误。请帮助我找到解决方案,谢谢

类型错误:“posixpath”对象不是可迭代的python

odopli94

odopli941#

好的,你把你的HTML文件作为文本传递,所以这就是为什么你不会收到作为模板的电子邮件。你可以使用jinja 2库来呈现你的模板并正确地发送它。你创建一个环境变量

env = Environment(
   loader=PackageLoader('app', 'templates'),#where you are getting the templates from
   autoescape=select_autoescape(['html', 'xml']))
template = env.get_template(template_name)
html = template.render(
    name=email,
    code=code,
    subject=subject
)

然后使用MessageSchema并像以前那样发送它!希望我的回答对您有所帮助

相关问题