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

Complex example

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.0.1.tar.gz (7.7 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.0.1-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: csvformatmail-1.0.1.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.2

File hashes

Hashes for csvformatmail-1.0.1.tar.gz
Algorithm Hash digest
SHA256 da98e89e1feb8ba74cd57a0f6caf283a8c9c7875be97229635da33efc9cb351c
MD5 856ff7cf8f3dffd319ae9cb50236bbbf
BLAKE2b-256 8af052d17a2c367540ea860fc8019be48ddea91ce1dac13e4f78824feb6f6a44

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csvformatmail-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.2

File hashes

Hashes for csvformatmail-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 be91cf15ddacc0746a4a2db2fb2bce82fc62ba37850dbd3330e6d8eef560585b
MD5 312766533c49cd51d0a60e0364b75b0c
BLAKE2b-256 f56fec4e3900e2920b58a1ad12a07aebc2c751e1ce43dc34d9093d3ad3f31292

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