在Python中使用 FastAPI 框架发送电子邮件
在直接进入主题之前,让我们先简单介绍一下我们将要使用的技术。顾名思义,我们将使用 FastAPI,一种Python语言框架。
快速API :
FastAPI 是一个用于开发 REST API 的Python框架。它非常容易构建、高性能、易于学习并准备好部署代码。虽然我们使用的是 FastAPI,但解释它超出了当前文章的范围。有关 FastAPI 的更多详细信息,请参阅以下资源。
Official documentation – https://fastapi.tiangolo.com/
Tutorial for using Fast API in Python – https://www.geeksforgeeks.org/creating-first-rest-api-with-fastapi/
在当前文章中,我们将介绍如何使用 FastAPI 框架发送电子邮件。我们将使用 fastapi-mail 库发送邮件。 Fastapi-mail 简单的轻量级邮件系统,发送邮件和附件。
安装
您可以使用安装库
pip install fastapi-mail
我们可以在有和没有登录身份验证的情况下使用以下文章。我们不会使用任何注册/身份验证过程,因为它超出了当前文章的范围。
创建项目
导入所需的库以发送电子邮件
from fastapi import FastAPI
from fastapi_mail import FastMail, MessageSchema,ConnectionConfig
from starlette.requests import Request
from starlette.responses import JSONResponse
from pydantic import EmailStr, BaseModel
from typing import List
app = FastAPI()
现在创建一个 pydantic 类以将电子邮件作为输入。
pydantic 是一个帮助我们为输入/请求编写验证的模块。
class EmailSchema(BaseModel):
email: List[EmailStr]
设置配置以使用 ConnectionConfig 发送电子邮件
conf = ConnectionConfig(
MAIL_USERNAME=from_,
MAIL_PASSWORD="************",
MAIL_PORT=587,
MAIL_SERVER="smtp.gmail.com",
MAIL_TLS=True,
MAIL_SSL=False
)
对于 MAIL_SERVER 参数,
如果您想使用 gmail,您可以输入“smtp.gmail.com”作为输入。
如果您想使用outlook作为发件人,您可以输入“smtp.office365.com”
让我们设置消息架构。
它包含诸如发送什么和发送谁之类的参数。
message = MessageSchema(
subject="Fastapi-Mail module",
recipients=email.dict().get("email"), # List of recipients, as many as you can pass
body=template,
subtype="html"
)
定义好配置和MessageSchema之后,
我们可以发送电子邮件。
fm = FastMail(conf)
await fm.send_message(message)
最终申请
整个代码看起来像这样,
Python3
@app.post("/send_mail")
async def send_mail(email: EmailSchema):
template = """
Hi !!!
Thanks for using fastapi mail, keep using it..!!!
"""
message = MessageSchema(
subject="Fastapi-Mail module",
recipients=email.dict().get("email"), # List of recipients, as many as you can pass
body=template,
subtype="html"
)
fm = FastMail(conf)
await fm.send_message(message)
print(message)
return JSONResponse(status_code=200, content={"message": "email has been sent"})
最后,
使用启动应用程序
uvicorn main:app --reload
服务器启动成功后,使用以下链接查看api列表。在我们的例子中,当您可以直接从文档页面本身提供输入时,我们将只有一个发送邮件 api(一个 POST 请求)。
http://127.0.0.1:8000/docs
输出 -
现在通过单击 try it out 并输入所需的电子邮件来执行 api,如下所示。
一旦 api 执行,它将返回 api 的 return 语句中提到的成功输出。
"message": "email has been sent"
最后是终端中的输出,
如果邮件发送成功,它返回状态代码(200)。
它显示的输出是我们通过电子邮件发送的模板。
您甚至可以发送带有附件等的邮件,同样的 Checkout 文档 – https://pypi.org/project/fastapi-mail/