Pix gmail

De Centre de Ressources Numériques - Labomedia
Aller à : navigation, rechercher

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...

pix_gmail-Labomedia.png


# -*- 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 !")