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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efcac717aeaed5f50550e4761742f279ff8e0c255b5bdedab21ad4bacb40af00
|
|
| MD5 |
f744860495c932833b4c6ef6bc8fe158
|
|
| BLAKE2b-256 |
f5249dc7cf29832622754539f9c2eec2adc11e39e5693290766a30906895c773
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
307a7eccb4c9d0f7438108e0880b7e158866eb6cdef79842cc49f8413cae366a
|
|
| MD5 |
137ead222d09de25284a10a7b63b54c7
|
|
| BLAKE2b-256 |
bc1283e083110f0b77bdca2072c0fd29939dd0337e338ffc1940ff30cf2569de
|