Pix gmail
pix_gmail est un programme en python qui combine un script d'envoi de mail écrit par Gawel sur Afpy avec la librairie aalib afin de composer une image en ascii-art avec la superposition des "objets" des mails dans Gmail.
Toutefois, pour obtenir un rendu satisfaisant, il faut utiliser une police à chasse fixe. Le thème Terminal disponible dans les paramètres de la messagerie présente cette particularité.
Sur Ubuntu 10.04, il n'y a que la librairie aalib à ajouter, tout le reste est présent par défaut sur le système :
sudo apt-get install pyhton-aalib
Une fois que vous aurez copié le script dans un fichier que vous nommerez pix_gmail.py il vous faudra renseigner les 3 champs A REMPLIR. Si vous mettez l'image à envoyer dans le même dossier (par ex toto.jpg), il ne vous restera plus qu'à exécuter la commande suivante :
python pix_gmail.py toto.jpg
A noter que si vous voulez tester le rendu de l'image sans l'envoyer, vous pouvez taper :
python pix_gmail.py -test toto.jpg
Merci à Jkp et sa Secret Ball pour l'élément déclencheur...
# -*- coding: utf-8 -*-
#!usr/bin/python
# Pix_gmail a été pondu par Olivier Baudu (lamouraupeuple at gmail dot com) lors des OpenAteliers version longue de 2011
# Il permet de composer une image en Ascii-Art avec la superposition des "objets" des mails
# dans une messagerie qui utilise une police à chasse fixe.
# C'est le cas de Gmail avec le thème Terminal.
# Il combine la librairie d'Ascii-Art aalib : http://aa-project.sourceforge.net/aalib/
# Avec un script d'envoi de mail posté par Gawal sur : http://www.afpy.org/Members/gawel/python/email_package
# Sur Ubuntu, la seule librairie non présente par défaut est python-aalib (disponible dans les dépôts).
# Pour l'exécuter il suffit d'écrire dans un terminal : python pix_gmail.py mon_image.jpg
# Pour tester le rendu de l'image sans l'envoyer, on peut taper : python pix_gmail.py -test mon_image.jpg
# Pix_gmail est sous license GPL v3.0
######################################
######################################
# la lib smtp qui nous permet de dialoguer avec un serveur de mail
import smtplib
# pour simuler une irrégularité d'envoi
from time import sleep
from random import random
# la lib d'Ascii-Art
import aalib
import Image
import sys
# un message email de type text
from email.MIMEText import MIMEText
de_qui = 'A REMPLIR' # par exemple 'john@malkovi.ch'
a_qui = 'A REMPLIR' # idem
serveur_smtp = 'A REMPLIR' # par exemple 'smtp.free.fr'
i = j = 28 # nombre de mail a envoyer donc de ligne,
nb = 88 # nombre de caractères par ligne, 28 et 88 correspondent au nombre maximum de caractères/lignes affichés dans Gmail avec un écran de 1366*768
###############
## FONCTIONS ##
###############
def gotoascii(pix): # transforme l'image en ascii
screen = aalib.AsciiScreen(width = nb-1, height = j)
image = Image.open(pix).convert('L').resize(screen.virtual_size)
screen.put_image((0, 0), image)
return (screen.render().replace(' ', '.').replace(',', '.').replace(';','.'))
def test(pix): # permet éventuellement de tester le rendu de l'image avant de l'envoyer
print (gotoascii(pix))
def ligne(num_l, pix):
return (gotoascii(pix)[nb*num_l:nb*(num_l+1)])
def send(num, pix):
email = MIMEText('Bonsjours,\n\nPour pouvoir décoder tous ces messages, il vous faut utiliser une police à chasse fixe, comme dans le thème Terminal de Gmail.\nPour plus d\'information : http://wiki.labomedia.org/index.php/Pix_gmail.') # objet Message contenant du text/plain
email['From']= de_qui # headers du mail : from/to/subject
email['To'] = a_qui
email['Subject'] = ligne(num, pix) # ajoute une ligne de l'image
# en remplacant les ,; et espaces
# par des points
server = smtplib.SMTP(serveur_smtp) # objet serveur par ex smtplib.SMTP('smtp.free.fr')
server.sendmail(de_qui, a_qui, email.as_string()) # on envoit le message
server.quit() # on ferme la connection
#########################
## PROGRAMME PRINCIPAL ##
#########################
if sys.argv[1] == "-test": # Écoute le flag -test
test(sys.argv[2])
else:
while i > 0:
sleep(20*random()+10) # augmente le délais et brise la régularité des envois de mail
send(i-1, sys.argv[1]) # afin d'éviter, peut-être, d'être black-listé par Gmail :-p
if i == 1:
print ("Tout se passe bien : mail n°{0} envoyé. Il n'en reste plus.".format(j+1-i))
else:
print ("Tout se passe bien : mail n°{0} envoyé. Il en reste encore {1}.".format(j+1-i, i-1))
i -= 1
print ("Bravo ! Cet envoi a été un succès !")