Package to integrate different email services with your application in just three lines of code.

python, email, sendgrid, amazon, ses, mailgun, project, client, setup, py, amazon-ses, email-client, hacktoberfest
pip install email-service==2.0.0


Email Service

Python package to quickly integrate different email services with your Application with just 3 lines of code.

pypi python license GitHub Release GitHub stars GitHub forks

Send Your email without caring about the backend code.

GitHub: ramanaditya/email-service


Install it with pip

$ pip install email-service

Email Integration

Save the API_KEY in the .env file as


Import EmailHandler

>>> from email_service.email_handler import EmailHandler

Form the dictionary of data

data = {
    "from_email": "Name WithSpace <>",  # Required
    "subject": "This is the test for the Individual email", # Required
    "reply_to_addresses": "",
    "html_body": "<h1>Email Template for Individual email</h1>",    # Either of html_body or text_body is required
    "text_body": "Email Template for Individual email",
    "to_for_bulk": [{"name": "Name", "email": ""},], # Required for Bulk Email
    "recipients": {
        "to": [{"name": "name1", "email": ""},],    # Required
        "cc": [{"name": "name2", "email": ""},],
        "bcc": [{"name": "name3", "email": ""},],
    "attachments": [
        "file_path (pdf)", "calender invite (ics)", "image_path (png/jpg/jpeg)"

Send the email

>>> # For Individual Email
>>> send_email = EmailHandler()

>>> # For Bulk Email
>>> send_email = EmailHandler(email_type="BULK")

Sendgrid Integration

>>> # Send it using sendgrid
>>> response = send_email.sendgrid(data)


    202: OK,
    400: Error
message: Error or Success Message


GitHub code size in bytes GitHub repo size black


Clone the repository

$ git clone

Create a virtual environment using virtualenv or venv.

$ python -m venv venv
$ source venv/bin/activate

Upgrade pip

$ python -m pip install --upgrade pip

Install python packages

$ python -m pip install -r requirements.txt

Git Flow

Create new Branch from develop branch

$ git checkout -b develop origin/develop
$ git checkout -b feature_branch

Push the Code

$ git add file_which_was_changed
$ git commit -m "Commit Message"
$ git push -u origin feature_branch

Build Package for Local Testing

$ # Build the package
$ python build

$ # Install the package
$ python install


This is just for the reference and need not to be run, If you want to run these scripts, please take a note of this

  • For testing, we maintain the test package at testpypi
  • PyPI or Test PyPI, does not accept same file name, you can change the file name or version in the ./
  • You will be prompted to enter
    • Either username and password
    • or, username as "__token__" and password as token (can be generated from the pypi website)
  • It will be uploaded to your pypi or testpypi account

Generating distribution archives

$ # Downloading latest version of setuptools
$ python -m pip install --user --upgrade setuptools wheel

$ python sdist bdist_wheel

Uploading to Test PyPI

$ # Upload to Test PyPI
$ python -m twine upload --repository testpypi dist/*

Download the package from Test PyPI

$ python -m pip install -i email-service

Check against the code

$ # Edit the file inside /example to have some valid data
$ # export SENDGRID_API_KEY before running the script
$ python  # For individual email
$ python  # For bulk email

Uploading to PyPI

$ # Upload to PyPI
$ python -m twine upload dist/*

Download the package from Test PyPI

$ python -m pip install -i email-service


GitHub issues PRs Welcome GitHub last commit
Issue No. Issue

NOTE: Feel free to open issues. Make sure you follow the Issue Template provided.

Contribution Guidelines

GitHub pull requests GitHub contributors
  • Write clear meaningful git commit messages (Do read this).
  • Make sure your PR's description contains GitHub's special keyword references that automatically close the related issue when the PR is merged. (Check this for more info)
  • When you make very very minor changes to a PR of yours (like for example fixing a text in button, minor changes requested by reviewers) make sure you squash your commits afterward so that you don't have an absurd number of commits for a very small fix. (Learn how to squash at here)
  • Please follow the PR Template to create the PR.
  • Always open PR to develop branch.
  • Please read our Code of Conduct.
  • Refer this for more.

If you ❤️ this repository , support it by star 🌟