Skip to main content

An easy way to send templated emails using an HTTP interface

Project description

Petit Mail

This app provides an easy way to send templated mails.

It implements and handles classic SMTP handlers and google-oauth2 handlers.

Using Jinja2 and premailer it can easily template an email and it's subject.

This lib aims to provide a solid base to build more complex service out of it.

The make_server function will return a prepared instance of FastAPI for later user. It is advised to run this app with uvicorn or gunicorn.

Endpoints

POST /send_mail/<_type: Literal['plain', 'html']>

Cet endpoint permet d'envoyer un mail :

{
    "data"?:{},
    "template_name"?:"",
    "content"?:"mail content",
    "subject"?:"mail subject",
    "from":"sender adress",
    "addresses":[]
}

if _type == 'html' then the mail will be templated with the data contained under the data key.

if _type == 'plain' then the mail won't be templated and the content under the content key will be used

GET /reload

Reloads all the template of the server without restarting the server.

How to write a template

This lib uses the Jinja2 template engine, so you can refer to the Jinja2 documentation for the syntax.

There is however, one diffence, in an effort to be concise the subject and the body of each template are in the same file.

So you have to put the subject of the email between this two balises: '' and ''

The body of the email should then be between this two balises: '<mail_content>' and '</mail_content>'

example :

<subject>
    Docker | Backup Failed
</subject>


<mail_content>

    <body>
        {% from "common/centered_button.html" import centered_button %} {% from "common/card.html" import card %} {% call card("La sauvegarde a échouée") %}

        <div style="white-space: pre-wrap">
            The backup failed at {{data.operation_date}}, if the problem persists, contact an administrator
        </div>
        <br /> {{ centered_button("Example Incorporation", "https://example.com") }}

        <br> Sysadmins {% endcall %}

    </body>

</mail_content>

How to reuse components

In order to make a component reusable, you have to place it into the common directory, and you don't have to use the special and <mail_content> balises.

Configuration

Most of the configuration is held in the conf.yaml file.

There are 2 things to configure, the template_provider and the emails senders:

The infos for the template provider are located under the templates key.

Two providers are provided with the library, an S3 provider and a local provider.

They can be used by using the string values 's3' or 'local'. You can see below an example of settings for both types.

exemple :

templates:
  # minio doesn't support the last options
  s3:
    host: documents.staging.example.com
    pass_key: password
    access_key: key
    bucket_name: mail-templates

  local: 
    folder: templates

exemple :

creds:
  example:
    type: gmail
    email: example@example.com
    refresh_token: <>
    client_id: <>
    client_secret: <>
  info:
    type: gmail
    email: info@example.com
    refresh_token: <>
    client_id: <>
    client_secret: <>

  # note that here with smtp support it's not the same keys
  info2:
    type: smtp
    email: info@example.com
    password: <>
    server: <>
    server_port: <>

How to get your tokens ?

  • Activate your Gmail API keys in the Gmail console
  • Get the credentials.json from the Gmail console
  • use the make_token.py script from the google_token_utils folder

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

petit_mail-0.1.4.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

petit_mail-0.1.4-py2.py3-none-any.whl (9.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file petit_mail-0.1.4.tar.gz.

File metadata

  • Download URL: petit_mail-0.1.4.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for petit_mail-0.1.4.tar.gz
Algorithm Hash digest
SHA256 8266af852612214dfd0ae495c0d32e59b344142152b8ccdfeba74bcc6c074924
MD5 d40fb22ef1db6634a3a5a9e1b507192d
BLAKE2b-256 c25f81e7d5196a46d26a91cd248de70ef1586ccf6268f40dfa8e3ecf218072e8

See more details on using hashes here.

File details

Details for the file petit_mail-0.1.4-py2.py3-none-any.whl.

File metadata

  • Download URL: petit_mail-0.1.4-py2.py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.6

File hashes

Hashes for petit_mail-0.1.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cd9e033aa68bfb3e0f978e859ee412cdde93f2be2e3422693e39c3576501bf56
MD5 d7a4f0ef9c77ec2d596ede79f82eef20
BLAKE2b-256 a534d3ccdd4a2dd9c587918b1985eac5c7dda93f0aa0bfcf81b3d7a3f2f53676

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