Simple lightwigh mail sending for FastApi
Project description
Fastapi-mail
The fastapi-mail simple lightweight mail system, sending emails and attachments(individual && bulk)
Installation
$ pip install fastapi-mail
notes
- The examples below based on gmail configuration, please read documentation for more information
- if you want to use your custom mail server, see the latest example below
In order to run the application use command below
uvicorn test_examples.main:app --reload --port 8001
Standart email sending example
from fastapi import FastAPI, BackgroundTasks
from starlette.responses import JSONResponse
from fastapi_mail import FastMail
from fastapi import Header,File, Body,Query, UploadFile
from test_examples.schema import EmailSchema
from pydantic import BaseModel,EmailStr
app = FastAPI()
html = """
<html>
<body>
<p>Hi This test mail
<br>Thanks for using Fastapi-mail</p>
</body>
</html>
"""
template = """
<html>
<body>
<p>Hi This test mail using BackgroundTasks
<br>Thanks for using Fastapi-mail</p>
</body>
</html>
"""
class EmailSchema(BaseModel):
email: EmailStr
@app.post("/email")
async def awesome_fastapi_func_1(email: EmailSchema) -> JSONResponse:
#as gmail requires TLS connection, therefore you require to set tls to True
mail = FastMail(email="your_account@gmail.com",password="your_pass",tls=True,port="587",service="gmail")
await mail.send_message(recipient=email.email,subject="Test email from fastapi-mail", body=html, text_format="html")
return JSONResponse(status_code=200, content={"message": f"email has been sent {email.email} address"})
Sending email as background task
@app.post("/emailbackground")
async def awesome_fastapi_func_2(background_tasks: BackgroundTasks,email: str = Body(...,embed=True)) -> JSONResponse:
#this mail sending using fastapi background tasks, faster than the above one
#Using Postman you can send post request, adding email in the body
{
"email": "recipient@gmail.com"
}
#for more information about background-tasks see the link below
#https://fastapi.tiangolo.com/tutorial/background-tasks/
mail = FastMail(email="your_account@gmail.com",password="your_pass",tls=True,port="587",service="gmail")
background_tasks.add_task(mail.send_message, recipient=email,subject="testing HTML",body=template,text_format="html")
return JSONResponse(status_code=200,
content={"message": f"email has been sent {email} address"})
Sending bulk mail
@app.post("/bulkemail")
async def awesome_fastapi_func_3(background_tasks: BackgroundTasks,emails: str=Body(...,embed=True)) -> JSONResponse:
#this an example of sending bulk emails
##Using Postman you can send post request, adding email in the body #example below
{
"emails": ["recipient1@gmail.com","recipient2@gmail.com"]
}
mail = FastMail(email="your_account@gmail.com",password="your_pass",tls=True,port="587",service="gmail")
background_tasks.add_task(mail.send_message,recipient=[email1,email2],subject="Bulk mail from fastapi-mail with background task",body="Bulk mail Test",text_format="plain",bulk=True)
return JSONResponse(status_code=200, content={"message": f"email has been sent to these {email1,email2} addresses"})
Sending bulk mails && files
@app.post("/bulkfile")
async def awesome_fastapi_func_4(background_tasks: BackgroundTasks,request: Request) -> JSONResponse:
#this example of sending bulk email and sending multiple files
mail = FastMail(email="your_account@gmail.com",password="your_pass",tls=True,port="587",service="gmail")
temp = await request.form()
files= []
for value in temp.values():
files.append(value)
email = ["account_1@gmail.com","account_2@gmail.com"]
mail = FastMail("******@gmail.com","******",tls=True)
background_tasks.add_task(mail.send_message, recipient=email,subject="Bulk mail from fastapi-mail with background task",body="Bulk mail Test",text_format="plain",bulk=True,file=files)
return JSONResponse(status_code=200, content={"message": f"email has been sent to these {email} addresses"})
Custom Mail server example
@app.post("/custom")
async def awesome_fastapi_func_5(email: EmailSchema) -> JSONResponse:
#In order to use custom mail service, you require to send services as keyword, and argument your mail server name. You must provide other information according to your mail server
mail = FastMail(email="your_account@gmail.com",password="your_pass",tls=True,ssl=True,port="465",custom=True,services="info.v1.example.com")
await mail.send_message(recipient=email.email,subject="Test email from fastapi-mail", body=html, text_format="html")
return JSONResponse(status_code=200, content={"message": f"email has been sent {email.email} address"})
Contributing
Fell free to open issue and send pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file fastapi-mail-0.2.7.9.3.tar.gz
.
File metadata
- Download URL: fastapi-mail-0.2.7.9.3.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | af430d453edb94ad453caeb896290be3814bfaae3a94c1cc9a7a620669270408 |
|
MD5 | f07d4f42480b29db97c98a4b6520f9fd |
|
BLAKE2b-256 | 4a4f18960aa63198614945223dd8c3cba36ab01cecacb12ad4b91fc633051cb7 |
File details
Details for the file fastapi_mail-0.2.7.9.3-py3-none-any.whl
.
File metadata
- Download URL: fastapi_mail-0.2.7.9.3-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 86439e34e4bf4f376f5c73e20a48ab7522f781b15207fc56757124d85962f25b |
|
MD5 | d6931e60d48f9263850aa1dfe8ee602d |
|
BLAKE2b-256 | c57fc0a9e118f54b0c7ab058be2c6ec65ab6994ceea7430f21717b8d322c0f2a |