LIVE
7-Zip nel 2026: perché è ancora il miglior programma per archiviare file Excel per ufficio: la guida per principianti dal foglio bianco all’autonomia TSMC sub-1nm: la roadmap verso il nodo A10 e i chip del 2030 WhatsApp Plus: prezzo, funzioni e come attivare l’abbonamento 2026 Come leggere un file Excel con Python e openpyxl NAMCO: la storia dei giochi che hanno rubato le monetine e il cuore a una generazione Guida Notepad++ Python requests: guida completa alle API REST con esempi 7-Zip nel 2026: perché è ancora il miglior programma per archiviare file Excel per ufficio: la guida per principianti dal foglio bianco all’autonomia TSMC sub-1nm: la roadmap verso il nodo A10 e i chip del 2030 WhatsApp Plus: prezzo, funzioni e come attivare l’abbonamento 2026 Come leggere un file Excel con Python e openpyxl NAMCO: la storia dei giochi che hanno rubato le monetine e il cuore a una generazione Guida Notepad++ Python requests: guida completa alle API REST con esempi
HomeGuide › Python: come inviare email automatiche con…
Guide

Python: come inviare email automatiche con smtplib

Pubblicità
Pubblicità

Inviare email automaticamente con Python è una delle automazioni più utili che puoi imparare. Con meno di 30 righe di codice puoi mandare report giornalieri, notifiche di sistema, alert su dati anomali o conferme automatiche — senza pagare servizi terzi. In questa guida ti mostro tutto, dalla configurazione iniziale ai casi d’uso avanzati.

Prerequisiti: Python 3.8 o superiore installato. Nessuna libreria esterna richiesta — smtplib è inclusa nella libreria standard di Python.

Come funziona smtplib

SMTP (Simple Mail Transfer Protocol) è il protocollo standard per inviare email. Python include la libreria smtplib che gestisce la connessione al server email e l’invio — senza installare nulla.

Il flusso è semplice:

  1. Apri una connessione al server SMTP (Gmail, Outlook, ecc.)
  2. Autenticati con email e password (o App Password)
  3. Componi il messaggio
  4. Invia e chiudi la connessione

Setup Gmail — App Password obbligatoria

Google non permette più di usare la password del tuo account direttamente. Devi creare una App Password dedicata:

  1. Vai su myaccount.google.com
  2. Sicurezza → Verifica in due passaggi (deve essere attiva)
  3. Sicurezza → Password per le app
  4. Seleziona “Altra” → dai un nome (es. “Python Script”) → Genera
  5. Copia la password di 16 caratteri generata — la usi al posto della password normale
Sicurezza: non scrivere mai email e password direttamente nel codice. Usa variabili d’ambiente o un file .env separato — ti mostro come più avanti.

Il codice base — email semplice in testo

import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # Configurazione MITTENTE = “tua@gmail.com” APP_PASSWORD = “xxxx xxxx xxxx xxxx” # App Password Gmail DESTINATARIO = “destinatario@email.it” # Crea il messaggio msg = MIMEMultipart() msg[‘From’] = MITTENTE msg[‘To’] = DESTINATARIO msg[‘Subject’] = “Report automatico Python” # Corpo del messaggio corpo = “”” Ciao, questo messaggio è stato inviato automaticamente da Python. Buona giornata! “”” msg.attach(MIMEText(corpo, ‘plain’, ‘utf-8’)) # Invio with smtplib.SMTP_SSL(‘smtp.gmail.com’, 465) as server: server.login(MITTENTE, APP_PASSWORD) server.send_message(msg) print(“Email inviata con successo!”)

Email HTML — con formattazione e colori

Puoi inviare email con HTML per report più professionali:

from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import smtplib msg = MIMEMultipart(‘alternative’) msg[‘Subject’] = “Report settimanale” msg[‘From’] = MITTENTE msg[‘To’] = DESTINATARIO # Versione testo (fallback) testo = “Visualizza questo report nel browser.” # Versione HTML html = “”” <html> <body> <h2 style=”color:#0066cc;”>Report Settimanale</h2> <table border=”1″ cellpadding=”8″ style=”border-collapse:collapse;”> <tr style=”background:#0066cc;color:#fff;”> <th>Metrica</th><th>Valore</th><th>Variazione</th> </tr> <tr> <td>Visitatori</td><td>1.250</td><td style=”color:green;”>+12%</td> </tr> <tr style=”background:#f5f5f5;”> <td>Conversioni</td><td>87</td><td style=”color:red;”>-3%</td> </tr> </table> <p>Report generato automaticamente il {data}</p> </body> </html> “””.format(data=__import__(‘datetime’).date.today()) msg.attach(MIMEText(testo, ‘plain’, ‘utf-8’)) msg.attach(MIMEText(html, ‘html’, ‘utf-8’)) with smtplib.SMTP_SSL(‘smtp.gmail.com’, 465) as server: server.login(MITTENTE, APP_PASSWORD) server.send_message(msg)

Email con allegato — invia file PDF o Excel

import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders import os msg = MIMEMultipart() msg[‘From’] = MITTENTE msg[‘To’] = DESTINATARIO msg[‘Subject’] = “Report con allegato” msg.attach(MIMEText(“In allegato il report mensile.”, ‘plain’, ‘utf-8’)) # Allegato percorso_file = “report_aprile.xlsx” with open(percorso_file, “rb”) as f: parte = MIMEBase(“application”, “octet-stream”) parte.set_payload(f.read()) encoders.encode_base64(parte) parte.add_header( “Content-Disposition”, f”attachment; filename={os.path.basename(percorso_file)}” ) msg.attach(parte) with smtplib.SMTP_SSL(‘smtp.gmail.com’, 465) as server: server.login(MITTENTE, APP_PASSWORD) server.send_message(msg)

Gestire le credenziali in modo sicuro

Non scrivere mai email e password nel codice sorgente. Usa le variabili d’ambiente:

# Metodo 1 — variabili d’ambiente (consigliato) import os MITTENTE = os.environ.get(‘EMAIL_MITTENTE’) APP_PASSWORD = os.environ.get(‘EMAIL_PASSWORD’) # Metodo 2 — file .env con python-dotenv # pip install python-dotenv from dotenv import load_dotenv load_dotenv() MITTENTE = os.environ.get(‘EMAIL_MITTENTE’) APP_PASSWORD = os.environ.get(‘EMAIL_PASSWORD’) # File .env (aggiungi al .gitignore!) # EMAIL_MITTENTE=tua@gmail.com # EMAIL_PASSWORD=xxxx xxxx xxxx xxxx

Inviare email automaticamente ogni giorno — con schedule

# pip install schedule import schedule import time def invia_report_giornaliero(): # … codice invio email … print(“Report inviato alle”, __import__(‘datetime’).datetime.now()) # Schedula ogni giorno alle 8:00 schedule.every().day.at(“08:00”).do(invia_report_giornaliero) # Oppure ogni lunedì alle 9:00 schedule.every().monday.at(“09:00”).do(invia_report_giornaliero) while True: schedule.run_pending() time.sleep(60)

Server SMTP dei principali provider

Provider Server SMTP Porta SSL Porta TLS
Gmailsmtp.gmail.com465587
Outlook/Hotmailsmtp.office365.com587
Yahoosmtp.mail.yahoo.com465587
Libero/Tin.itsmtp.libero.it465587

Errori comuni e come risolverli

SMTPAuthenticationError: Username and Password not accepted
Stai usando la password del tuo account invece dell’App Password. Genera una App Password da myaccount.google.com.

Connection refused su porta 465
Usa smtplib.SMTP_SSL per la porta 465, oppure smtplib.SMTP con server.starttls() per la porta 587.

Email finisce nello spam
Aggiungi un oggetto chiaro, un testo plain-text oltre all’HTML, e non usare parole come “GRATIS” o “URGENTE” nell’oggetto.

Conclusione

Con smtplib puoi automatizzare l’invio di email in pochi minuti senza dipendere da servizi terzi. Il caso d’uso più comune è il report automatico: leggi dati da Excel o da un database, costruisci una tabella HTML, e mandi l’email ogni mattina prima che arrivi in ufficio.

Nel prossimo articolo vedremo come leggere dati da Excel con openpyxl e inserirli automaticamente nel corpo dell’email.

SCRITTO DA Nicodemo Bonofiglio
Ingegnere Informatico con oltre 20 anni di esperienza in ambito ERP, banking e PA. Analista funzionale, appassionato di AI e sviluppo web. Fondatore di TuttoAlQuadrato guide IT pratiche in italiano.
← Formattazione condizionale Excel: la guida completa con… Google I/O 2026: date, programma e tutto… →

Lascia un commento