Skip to main content

A tool to send many mails from csv and a template

Project description

csvformatmail: A tool to format mails from csv and to send them

Installing

From pypi:

pipx install csvformatmail

You can also use pip if you do not want to install in a contained environnement.

Or developer version:

git clone <this repo>
cd csvformatmail
pip3 install -e .

(Optional) Enable completion (for bash or other shells using bash-completion)

mkdir -p ~/.local/share/bash-completion/completions
register-python-argcomplete csvformatmail > ~/.local/share/bash-completion/completions/csvformatmail

Example

Write a mail template:

From: My name <my-mail-address@example.org>
To: {{mail}}
Bcc: my-mail-address@example.org
Subject: Result of the last test

Dear {{firstname}} {{lastname.capitalize()}},

Your results of the last test are:

 - Part A: {{"{:.1f}".format(a)}}
 - Part B: {{"{:.1f}".format(b)}}

Therefore you {% if (a+b)/2>=10 %}pass{%else%}fail{%endif%} the test.
{% if (a+b)/2<10 %}
Another test session will be organized soon.
{%endif%}
-- 
Your teacher

Use a csv file with (at least) the columns firstname, lastname, mail, a and b:

firstname,lastname,mail,a,b,c
Jacques,MARTIN,jacques.martin@example.org,12.54441,14,1111.221
…

And the command if you use a distant smtp:

csvformatmail -h smtp.example.org -l mylogin template.txt -t a:float -t b:float listing.csv

Or if you have a local smtp:

csvformatmail template.txt -t a:float -t b:float listing.csv

Attachments

The template file can contain the header "Attachments" to specify attachments. The value of this header is a comma separated list of paths to files to attach. The files must be accessible from the current working directory.

Example:

From: My name <my-mail-address@example.org>
To: {{mail}}
Bcc: my-mail-address@example.org
Subject: Result of the last test
Attachments: /path/to/file1.txt, {{filename}}.pdf

Dear {{firstname}} {{lastname.capitalize()}},

Your results in attachments.

Here, the csv file must contains columns filename, mail, firstname, and lastname.

Example with formatting and conditional rendering

The template file can contain python definition, and all the rows for each column is accessible by the names allrows (default name, can be changed with arg --allrows-name). See the following template file:

From: My name <my-mail-address@example.org>
To: {{mail}}
Bcc: my-mail-address@example.org
Subject: Result of the last test

Dear {{firstname}} {{lastname.capitalize()}},

Your results of the last test are:

 - Part A: {{"{:.1f}".format(a)}}
 - Part B: {{"{:.1f}".format(b)}}

For you information, the statistics for part A are:
 - mean: {{'{:.2f}'.format(np.mean(allrows['a']))}}
 - standard deviation: {{'{:.2f}'.format(np.std(allrows['a']))}}.

Therefore you {% if (a+b)/2>=10 %}pass{%else%}fail{%endif%} the test.
{% if (a+b)/2<10 %}
Another test session will be organized soon.
{%endif%}
-- 
Your teacher.

And the command if you use a distant smtp:

csvformatmail -h smtp.example.org -l mylogin template.txt --np -t a:float -t b:float listing.csv

Misc

Consider use function fill and indent of textwrap module. For this you need use -b "import textwrap" or add a python preamble in you template file. e.g. in a template to rewrap to 72 chars:

{{textwrap.fill(somevalue, width=72)}}

Or, for rewrap and indent by > :

{{textwrap.indent(textwrap.fill(somevalue, width=70), "> ")}}

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

csvformatmail-1.2.0.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

csvformatmail-1.2.0-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file csvformatmail-1.2.0.tar.gz.

File metadata

  • Download URL: csvformatmail-1.2.0.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for csvformatmail-1.2.0.tar.gz
Algorithm Hash digest
SHA256 541bc8967fd292d1b15faf0199e2b8a38991b8b1f056009a069e30291edada16
MD5 7c4c846db23a67571bcf1b75307600d7
BLAKE2b-256 e5e87b44590e189ced17fcc636449924d5f6c86404bb9051e7488f28e6e76cbb

See more details on using hashes here.

File details

Details for the file csvformatmail-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: csvformatmail-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for csvformatmail-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3ea3ca94c0f4cccfa517ac89313c19c0eb87a1335358e918a88ae0c46a3726cc
MD5 061dcf51fbcac7e04d098c3265f4940a
BLAKE2b-256 c5a499ee92a76a5d20fad90f16853c9d9e5f2dc71488148d53affd7dbd6c0557

See more details on using hashes here.

Supported by

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