Envoyer un mail par SMTP en python

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 = 'XXX.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://XXX.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 .