📜  在Python中使用 FastAPI 框架发送电子邮件

📅  最后修改于: 2022-05-13 01:54:57.316000             🧑  作者: Mango

在Python中使用 FastAPI 框架发送电子邮件

在直接进入主题之前,让我们先简单介绍一下我们将要使用的技术。顾名思义,我们将使用 FastAPI,一种Python语言框架。

快速API :

FastAPI 是一个用于开发 REST API 的Python框架。它非常容易构建、高性能、易于学习并准备好部署代码。虽然我们使用的是 FastAPI,但解释它超出了当前文章的范围。有关 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/