Commit 767c15b6 authored by Nicolas Ollinger's avatar Nicolas Ollinger

support de types de fichiers divers

parent 888fbe41
Robot de mailing -- écrit en vitesse en post-COVID19 Robot de mailing -- écrit en vitesse en post-COVID19
Script python pour automatiser l'envoi de fichiers PDF individualisés Script python pour automatiser l'envoi de fichiers individualisés
à de nombreux utilisateurs. Par exemple, envoi de sujets d'examen à à de nombreux utilisateurs. Par exemple, envoi de sujets d'examen PDF à
des étudiants. des étudiants.
Attention, on peut vite se retrouver à spammer le serveur et les utilisateurs. Attention, on peut vite se retrouver à spammer le serveur et les utilisateurs.
......
...@@ -2,3 +2,13 @@ ...@@ -2,3 +2,13 @@
2020-06-07 14:37:55,276 alice.demo@mailinator.com: OK 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,451 bob.demo@mailinator.com: OK
2020-06-07 14:37:55,458 ==== Fin du mailing ==== 2020-06-07 14:37:55,458 ==== Fin du mailing ====
2020-06-07 14:53:46,688 ==== Début du mailing ====
2020-06-07 14:54:29,406 ==== Début du mailing ====
2020-06-07 14:54:29,609 alice.demo@mailinator.com: OK
2020-06-07 14:54:29,779 bob.demo@mailinator.com: OK
2020-06-07 14:54:29,786 ==== Fin du mailing ====
2020-06-07 14:55:13,281 ==== Début du mailing ====
2020-06-07 14:55:13,471 alice.demo@mailinator.com: OK
2020-06-07 14:55:13,641 bob.demo@mailinator.com: OK
2020-06-07 14:55:13,839 nopid@free.fr: OK
2020-06-07 14:55:13,846 ==== Fin du mailing ====
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*-
from sys import version_info
if version_info[0] != 3:
print("This script requires Python 3")
exit()
from smtplib import SMTP_SSL from smtplib import SMTP_SSL
from getpass import getpass from getpass import getpass
from email.message import EmailMessage from email.message import EmailMessage
...@@ -6,6 +12,12 @@ from email.policy import EmailPolicy ...@@ -6,6 +12,12 @@ from email.policy import EmailPolicy
from email.utils import formatdate from email.utils import formatdate
from configparser import ConfigParser from configparser import ConfigParser
import csv, logging import csv, logging
import mimetypes
mimetypes.init()
mimetypes.add_type('application/pdf','.pdf')
def autotype(path, default=('application/pdf',)):
return (mimetypes.guess_type(path) or default)[0].split('/')
with open('mailing.txt') as f: with open('mailing.txt') as f:
sujet=f.readline().strip() sujet=f.readline().strip()
...@@ -20,7 +32,7 @@ if 'passwd' not in conf['server']: ...@@ -20,7 +32,7 @@ if 'passwd' not in conf['server']:
if 'bcc' not in conf['mail']: if 'bcc' not in conf['mail']:
conf['mail']['bcc']='false' conf['mail']['bcc']='false'
def envoie(serveur,port,login,mdp,sujet,corps,emet,dest,dobcc,pdf_path,filename): def envoie(serveur,port,login,mdp,sujet,corps,emet,dest,dobcc,file_path,filename):
msg=EmailMessage(EmailPolicy(utf8=False)) msg=EmailMessage(EmailPolicy(utf8=False))
msg['Subject']=sujet msg['Subject']=sujet
msg['From']=emet msg['From']=emet
...@@ -29,9 +41,10 @@ def envoie(serveur,port,login,mdp,sujet,corps,emet,dest,dobcc,pdf_path,filename) ...@@ -29,9 +41,10 @@ def envoie(serveur,port,login,mdp,sujet,corps,emet,dest,dobcc,pdf_path,filename)
if dobcc: if dobcc:
msg['Bcc']=emet msg['Bcc']=emet
msg.set_content(corps) msg.set_content(corps)
with open(pdf_path,'rb') as f: with open(file_path,'rb') as f:
dapdf=f.read(-1) dafile=f.read(-1)
msg.add_attachment(dapdf, maintype='application', subtype='pdf', filename=filename) ftype=autotype(file_path)
msg.add_attachment(dafile, maintype=ftype[0], subtype=ftype[1], filename=filename)
with SMTP_SSL(serveur,port) as server: with SMTP_SSL(serveur,port) as server:
server.login(login,mdp) server.login(login,mdp)
try: try:
......
Cette ligne contient le sujet du message Cette ligne contient le sujet du message
Cher {}, Cher {},
Voici un exemple d'envoi automatisé de fichiers PDF. Voici un exemple d'envoi automatisé de fichiers.
La configuration du script (serveur d'envoi, login, mot de passe, adresse de l'émetteur) se fait La configuration du script (serveur d'envoi, login, mot de passe, adresse de l'émetteur) se fait
dans le fichier mailing.conf. 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 : mailing.txt. Enfin, le fichier mailing.csv contient, au format CSV, les informations suivantes :
- adresse du destinataire ; - adresse du destinataire ;
- chemin d'accès au fichier PDF à attacher au message ; - chemin d'accès au fichier à attacher au message ;
- nom associé au fichier PDF dans le message ; - nom associé au fichier dans le message ;
- autant d'éléments que nécessaires pour remplir les champs variables du corps du message. - autant d'éléments que nécessaires pour remplir les champs variables du corps du message.
Lors de l'exécution de mailing.py, si le fichier de configuration ne contient pas le champ passwd, Lors de l'exécution de mailing.py, si le fichier de configuration ne contient pas le champ passwd,
......
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