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.1.0.tar.gz (8.1 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.1.0-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for csvformatmail-1.1.0.tar.gz
Algorithm Hash digest
SHA256 efcac717aeaed5f50550e4761742f279ff8e0c255b5bdedab21ad4bacb40af00
MD5 f744860495c932833b4c6ef6bc8fe158
BLAKE2b-256 f5249dc7cf29832622754539f9c2eec2adc11e39e5693290766a30906895c773

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csvformatmail-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.9 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 307a7eccb4c9d0f7438108e0880b7e158866eb6cdef79842cc49f8413cae366a
MD5 137ead222d09de25284a10a7b63b54c7
BLAKE2b-256 bc1283e083110f0b77bdca2072c0fd29939dd0337e338ffc1940ff30cf2569de

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