Before we jump in into sending emails, let us first see some pros, cons of using Brevo (SendInBlue). Also, please note that in no way, Sendinblue sponser me 😔.
Pros:
- Quick Setup
- Minimal Code (for simple transactional emails)
Cons:
- Documentation can be significantly improved :(
Let's install some requirements first with pip install -r requirements.txt
fastapi==0.101.1
uvicorn==0.23.2
python-dotenv==1.0.0
requests==2.31.0
Let's jumpstart on integrating Brevo with FastAPI. I would like to create a generic service first that can be consumed with Python. And then simply call the function in our fastapi route.
import requests
import json
from config import settings
def send_email(to_email: str, subject: str, text_content: str):
url = "https://api.brevo.com/v3/smtp/email"
payload = json.dumps(
{
"sender": {"name": "Sourabh", "email": settings.EMAIL_FROM},
"to": [{"email": f"{to_email}"}],
"subject": subject,
"textContent": text_content,
}
)
headers = {
"accept": "application/json",
"api-key": settings.BREVO_API_KEY,
"content-type": "application/json",
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Yup, that's it, this piece of code is sufficient to send a simple transactional email. We would also require a file where we can store our configuration variables. It can be a config.py file that reads configurations from a .env file.
import os
from dotenv import load_dotenv
from pathlib import Path
env_path = Path(".") / ".env"
load_dotenv(dotenv_path=env_path)
class Settings:
EMAIL_FROM = os.getenv("EMAIL_FROM","[email protected]")
BREVO_API_KEY: str = os.getenv("BREVO_API_KEY")
settings = Settings()
Obviously, we would need the .env file to have the secrets. The .env file is below:
BREVO_API_KEY=xkeysib-watchtheseanimes:dororo|opm|deathnote|andAOTforsure
Almost, there, We need to plug the send_mail to our main.py file.
from fastapi import FastAPI
from services.brevo import send_email
app = FastAPI()
@app.get("/")
async def root():
send_email(
to_email="[email protected]",
subject="Is Python SDK work done?",
text_content="Hi Sourabh,\nIs Python SDK work complete or not?")
return {"message": "Hello World"}
Now, if you visit: 127.0.0.1:8000, You should receive mail, also the terminal would say something just like this
INFO: Started server process [23844]
INFO: Waiting for application startup.
INFO: Application startup complete.
{"messageId":"<[email protected]>"}
Brige the gap between Tutorial hell and Industry. We want to bring in the culture of Clean Code, Test Driven Development.
We know, we might make it hard for you but definitely worth the efforts.
© Copyright 2022-23 Team FastAPITutorial