Commit 888fbe41 authored by Nicolas Ollinger's avatar Nicolas Ollinger

migration de JSON à ConfigParser

parent 6b5b35cb
......@@ -11,7 +11,7 @@ destinataires !
Le script principal est mailing.py (nécessite Python 3).
La configuration est répartie entre les fichiers suivants :
- mailing.json : connexion au serveur, identité de l'expéditeur
- mailing.conf : connexion au serveur, identité de l'expéditeur
- mailing.txt : sujet et corps du message qui accompagne la pièce-jointe
- mailing.csv : liste des destinataires et de leurs fichiers
......
# la section [server] contient le serveur SMTP, son port et le login utilisé
# le mot de passe est éventuellent fourni dans le champ passwd
[server]
hostname: smtps.univ-orleans.fr
port: 465
login: p29719
# la section [mail] contient l'adresse de l'émetteur du mailing
# le champ bcc (true/false) indique si l'émetteur doit être en copie cachée des messages
[mail]
sender: Nicolas Ollinger <Nicolas.Ollinger@univ-orleans.fr>
bcc: true
{
"server": "smtps.univ-orleans.fr",
"port": 465,
"login": "p29719",
"sender": "Nicolas Ollinger <Nicolas.Ollinger@univ-orleans.fr>"
}
2020-06-07 14:09:36,684 ==== Début du mailing ====
2020-06-07 14:09:36,874 alice.demo@mailinator.com: OK
2020-06-07 14:09:37,037 bob.demo@mailinator.com: OK
2020-06-07 14:09:37,043 ==== Fin du mailing ====
2020-06-07 14:37:55,068 ==== Début du mailing ====
2020-06-07 14:37:55,276 alice.demo@mailinator.com: OK
2020-06-07 14:37:55,451 bob.demo@mailinator.com: OK
2020-06-07 14:37:55,458 ==== Fin du mailing ====
......@@ -4,23 +4,30 @@ from getpass import getpass
from email.message import EmailMessage
from email.policy import EmailPolicy
from email.utils import formatdate
import csv, logging, json
from configparser import ConfigParser
import csv, logging
with open('mailing.txt') as f:
sujet=f.readline().strip()
texte=f.read(-1)
with open('mailing.json') as f:
conf=json.load(f)
if 'passwd' not in conf:
conf['passwd']=getpass()
conf=ConfigParser()
conf.read('mailing.conf')
if 'port' not in conf['server']:
conf['server']['port']='465'
if 'passwd' not in conf['server']:
conf['server']['passwd']=getpass()
if 'bcc' not in conf['mail']:
conf['mail']['bcc']='false'
def envoie(serveur,port,login,mdp,sujet,corps,emet,dest,pdf_path,filename):
def envoie(serveur,port,login,mdp,sujet,corps,emet,dest,dobcc,pdf_path,filename):
msg=EmailMessage(EmailPolicy(utf8=False))
msg['Subject']=sujet
msg['From']=emet
msg['To']=dest
msg['Date']=formatdate(localtime=True)
if dobcc:
msg['Bcc']=emet
msg.set_content(corps)
with open(pdf_path,'rb') as f:
dapdf=f.read(-1)
......@@ -40,5 +47,6 @@ with open('mailing.csv',newline='') as f:
reader=csv.reader(f)
for row in reader:
print('{}...'.format(row[0]))
envoie(conf['server'],conf['port'],conf['login'],conf['passwd'],sujet,texte.format(*row[3:]),conf['sender'],row[0],row[1],row[2])
envoie(conf['server']['hostname'],int(conf['server']['port']),conf['server']['login'],conf['server']['passwd'],
sujet,texte.format(*row[3:]),conf['mail']['sender'],row[0],conf['mail']['bcc']=='true',row[1],row[2])
logging.info('==== Fin du mailing ====')
......@@ -4,7 +4,7 @@ Cher {},
Voici un exemple d'envoi automatisé de fichiers PDF.
La configuration du script (serveur d'envoi, login, mot de passe, adresse de l'émetteur) se fait
dans le fichier mailing.json. Le sujet et le corps du message sont à placer dans le fichier
dans le fichier mailing.conf. Le sujet et le corps du message sont à placer dans le fichier
mailing.txt. Enfin, le fichier mailing.csv contient, au format CSV, les informations suivantes :
- adresse du destinataire ;
- chemin d'accès au fichier PDF à attacher au message ;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment