Skip to main content

Simple interface for sending emails with the builder design pattern with different services.

Project description

email-builder

This is a module to make it simple to send emails. The code follows the builder design pattern and the email code is completely separated from the client used to actually send the email, making it easy to switch to a new client if we ever need to move away from SES for whatever reason.

Sample Usage

Install

pip install easy-email-builder

Setup

import email_builder

Send an email from Gmail

# builder syntax
# when using gmail, you need an "App Password". follow this link if you need help creating that:
# https://www.lifewire.com/get-a-password-to-access-gmail-by-pop-imap-2-1171882

import email_builder

client = email_builder.clients.Gmail(password="<gmail APP password>")
email = (
  email_builder.Email()
    .sender("your.email@gmail.com")
    .to("someones.email@gmail.com")
    .cc("copy.email@gmail.com")
    .bcc("another.copy.email@gmail.com")
    .subject("test email sent from my python lib")
    .text("hello world")
)
email.send(client)

Send an email Amazon SES with just some html as the body

# builder syntax 
import email_builder

# this SES class accepts a boto3 session if you want to customize the setup
client = email_builder.clients.SES()
email = (
  email_builder.Email()
    .sender("my.email@company.com")
    .to("recipient.1@company.com")
    .to("recipient.2@company.com")
    .subject("test email sent from my python lib")
    .html("<h1> hello world </h1>")
)
email.send(email_builder.clients.SES())

Send an email with attachments

# note that the contents of the attachments can be either string or bytestring 
import email_builder

with open("report.csv", "rb") as f:
  data = f.read()

client = email_builder.clients.SES()
email = (
  email_builder.Email()
    .sender("my.email@company.com")
    .to("recipient.1@company.com")
    .to("recipient.2@company.com")
    .subject("test email sent from my python lib")
    .markdown("# hello world")
    .attachment(email_builder.Attachment("report.csv", data))
    .attachment(email_builder.Attachment("test2.json", """{"key": "value"}"""))
).send(email_builder.clients.SES())

Email Options

import email_builder

with open("report.csv", "rb") as f:
  data = f.read()

# --- client types are SES or Gmail --- #
# Amazon SES that can accept a session object as needed
client = email_builder.clients.SES()
# or
import boto3
session = boto3.Session(region="us-west-2", etc)
client = email_builder.clients.SES(session)

# Gmail that accepts a password and options to configure port/url if needed
client = email_builder.clients.SES(password="<password>")


# --- email options --- #
email = (
  email_builder.Email()

    # sender(sender:str) -> only one sender allowed, no chaining allowed on sender
    .sender("my.email@company.com")

    # to(*recipients:str) -> you can add as many as you want here, and chain to()
    #                        calls successively
    .to("recipient.1@company.com")
    .to("recipient.2@company.com")

    # cc(*recipients:str) -> you can add as many as you want here, and chain to()
    #                        calls successively
    .cc("recipient.1@company.com")
    .cc("recipient.2@company.com")

    # bcc(*recipients:str) -> you can add as many as you want here, and chain to()
    #                        calls successively
    .bcc("recipient.1@company.com")
    .bcc("recipient.2@company.com")

    # subject(subject:str) -> only one subject line allowed
    .subject("test email sent from my python lib")

    # --- EMAIL BODY --- #
    # you need to choose between either html, markdown or text, can't use more than one

    # html(data:str) -> renders the given html in the email body, no chaining
    .html("<h1> hello world </h1>")
	
	# markdown(body:str) -> renders the given markdown as html in the email body, no chaining
    .markdown("# hello world")

    # test(body:str) -> adds the given text to the email body as plain text
    .text("hello world")

    # attachment(attachment:email_builder.Attchment) -> chain as many of these as you want
    .attachment(email_builder.Attachment("report.csv", data))
    .attachment(email_builder.Attachment("test2.json", """{"key": "value"}"""))

)

# result contains a dictionary with status in the body
result = email.send(client)
print(result)

Success result:

{
	"status": "passed",
	"error": None
}

Failure result:

{
	"status": "failed",
	"error": Exception(...)
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

easy-email-builder-1.0.3.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

easy_email_builder-1.0.3-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file easy-email-builder-1.0.3.tar.gz.

File metadata

  • Download URL: easy-email-builder-1.0.3.tar.gz
  • Upload date:
  • Size: 3.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for easy-email-builder-1.0.3.tar.gz
Algorithm Hash digest
SHA256 f525297cbabba2619fcfef867bee0967412583b1e3be970cea2a5c68734cade0
MD5 7f48ea63da510ddb58baa917b7f5814a
BLAKE2b-256 c16d04ba8cfd18b8d530eb367023db62bb24ae0a03453b012a47a9c5581d77b8

See more details on using hashes here.

File details

Details for the file easy_email_builder-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for easy_email_builder-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1fb9ce03fbaa542d0e799996a9882a27895d4e86729b38d13ba040a13fe105ea
MD5 b6e75e705918f096570d1fc595edd191
BLAKE2b-256 b60431a9c9096c4059692bf5a3743166552769ac587333b38e1721ad50add098

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page