Reading time: 2 minutes
In this tutorial, I will show you how to send emails using FastAPI and fastapi_mail.

FastAPI is a modern and fast web framework for building APIs with Python 3.6+ based on the ASGI standard and with the philosophy of “less code, more productivity.” On the other hand, fastapi_mail is a FastAPI extension that allows for easy and fast email sending.
To get started, make sure you have Python 3.6+ installed on your system. Then, follow these steps:
Step 1: Installation of fastapi_mail
To install fastapi_mail, simply run the following command in your terminal:
pip install fastapi-mail
Step 2: FastAPI Configuration
Before sending emails, you need to configure FastAPI to use fastapi_mail. To do this, create a main.py file with the following content:
from fastapi import FastAPI
from fastapi_mail import FastMail, MessageSchema, ConnectionConfig
app = FastAPI()
conf = ConnectionConfig(
MAIL_USERNAME = "your_email_address",
MAIL_PASSWORD = "your_email_password",
MAIL_FROM = "your_email_address",
MAIL_PORT = 587,
MAIL_SERVER = "smtp.gmail.com",
MAIL_TLS = True,
MAIL_SSL = False
)
@app.post("/send-email")
async def send_email(subject: str, email_to: str, body: str):
message = MessageSchema(
subject=subject,
recipients=[email_to],
body=body,
subtype="html"
)
fm = FastMail(conf)
await fm.send_message(message)
return {"message": "email has been sent"}
In the above code, we are configuring the email connection details (SMTP server, ports, credentials, etc.) in the conf variable. Then, we define the send-email route that accepts three parameters: subject, email_to, and body. Finally, we create an instance of FastMail with the previously defined configuration and use the send_message method to send the email.
Note: The example above uses a Gmail account to send emails. Make sure to allow access for less secure apps in your Gmail account if you encounter any issues with sending emails.
Step 3: Testing Email Sending
To test email sending, simply run your FastAPI server and send a POST request to http://localhost:8000/send-email with the following sample data:
{
"subject": "Test Email",
"email_to": "recipient@example.com",
"body": "<h1>Hello!</h1><p>This is a test email sent from FastAPI.</p>"
}
If everything is set up correctly, you should receive an email at the address specified in email_to.
That’s it! Now you know how to send emails with FastAPI and fastapi_mail. If you need more information about fastapi_mail, check out the official documentation at: https://fastapi-mail.readthedocs.io/en/latest/.
(Do not include the Reading time). Return it directly in HTML format. Do not write any additional sentences. When you’re done, add a PIPE at the end.
