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
Script python pour automatiser l'envoi de fichiers PDF individualisés
à de nombreux utilisateurs. Par exemple, envoi de sujets d'examen à
Script python pour automatiser l'envoi de fichiers individualisés
à de nombreux utilisateurs. Par exemple, envoi de sujets d'examen PDF à
des étudiants.
Attention, on peut vite se retrouver à spammer le serveur et les utilisateurs.
......
......@@ -2,3 +2,13 @@
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 ====
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
# -*- 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 getpass import getpass
from email.message import EmailMessage
......@@ -6,6 +12,12 @@ from email.policy import EmailPolicy
from email.utils import formatdate
from configparser import ConfigParser
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:
sujet=f.readline().strip()
......@@ -20,7 +32,7 @@ if 'passwd' not in conf['server']:
if 'bcc' not in conf['mail']:
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['Subject']=sujet
msg['From']=emet
......@@ -29,9 +41,10 @@ def envoie(serveur,port,login,mdp,sujet,corps,emet,dest,dobcc,pdf_path,filename)
if dobcc:
msg['Bcc']=emet
msg.set_content(corps)
with open(pdf_path,'rb') as f:
dapdf=f.read(-1)
msg.add_attachment(dapdf, maintype='application', subtype='pdf', filename=filename)
with open(file_path,'rb') as f:
dafile=f.read(-1)
ftype=autotype(file_path)
msg.add_attachment(dafile, maintype=ftype[0], subtype=ftype[1], filename=filename)
with SMTP_SSL(serveur,port) as server:
server.login(login,mdp)
try:
......
Cette ligne contient le sujet du message
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
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 ;
- nom associé au fichier PDF dans le message ;
- chemin d'accès au fichier à attacher au message ;
- nom associé au fichier dans le 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,
......
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