Nous allons voir dans ce chapitre comment envoyer un mail en SMTP avec la library smtplib .
gmail
Prenons l'exemple d'une adresse gmail , dans notre cas l'adresse sera [email protected]
# coding: utf-8 import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText msg = MIMEMultipart() msg['From'] = '[email protected]' msg['To'] = '[email protected]' msg['Subject'] = 'Le sujet de mon mail' message = 'Bonjour !' msg.attach(MIMEText(message)) mailserver = smtplib.SMTP('smtp.gmail.com', 587) mailserver.ehlo() mailserver.starttls() mailserver.ehlo() mailserver.login('[email protected]', 'PASSWORD') mailserver.sendmail('[email protected]', '[email protected]', msg.as_string()) mailserver.quit()
Ce code est indépendant de la configuration de votre serveur. Pas besoin d'installer quoi que ce soit pour que le mail puisse être envoyé.
Envoyer un mail lorsqu'une page web est défaillante
Les admins système utilisent souvent des alertes SMS ou des alertes mail pour être averti en cas de soucis sur leur serveur. Prenons un cas pratique où nous sommes dans la situation d'un serveur qui surveille un autre. Le premier check toutes les minutes si le deuxième serveur répond pour une requête HTTP et surtout si son temps de réponse est acceptable:
# coding: utf-8 import urllib2 import time import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText from fabric.api import * def send_error(t2, name): env.host_string = 'AAA.com' env.user = 'user' env.password = 'PASSWORD' # On récupère les connexions actives du serveur distant adresses_ip = run("netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n") msg = MIMEMultipart() msg['From'] = '[email protected]' msg['To'] = '[email protected]' msg['Subject'] = 'Temps de réponse: {0} {1}s'.format(name, t2) message = 'Temps de réponse: {0} - {1}'.format(t2, adresses_ip) msg.attach(MIMEText(message)) mailserver = smtplib.SMTP('smtp.gmail.com', 587) mailserver.ehlo() mailserver.starttls() mailserver.ehlo() mailserver.login('[email protected]', 'PASSWORD') mailserver.sendmail('[email protected]', '[email protected]', msg.as_string()) mailserver.quit() t1 = time.time() try: response = urllib2.urlopen('http://AAA.com') html = response.read() except: t2 = time.time() - t1 send_error(t2, "EXCEPTION") t2 = time.time() - t1 if t2 > 5: send_error(t2, "TIMEOUT")
Pour exécuter ce script toutes les minutes, pensez à éditer votre crontab .