8.1 Leggere la posta
Penso che ormai abbiamo abbastanza familiarità con le basi del lavoro in rete. Perché non ci dedichiamo a qualcosa di più interessante — dato che in rete ci sono tante cose affascinanti. Che ne dici di leggere e inviare email?
L'email è nata 50 anni fa, 20 anni prima del primo browser. Allora si usavano programmi speciali per inviare posta. Cosa significa questo per noi? Che lo standard (protocollo) per lavorare con la posta è semplice come bere un bicchier d'acqua.
Il protocollo POP3
(Post Office Protocol version 3) è utilizzato per ottenere le email dal server di posta. A differenza di IMAP
, POP3
solitamente scarica le email sul computer locale e le elimina dal server. In Python, per lavorare con POP3
puoi utilizzare la libreria poplib
.
Nota: A differenza di POP3, il protocollo IMAP (Internet Message Access Protocol) consente di conservare le email sul server e sincronizzarne lo stato tra dispositivi. IMAP è più comodo se leggi le email da diversi dispositivi, mentre POP3 è più adatto per memorizzare le email localmente su un unico dispositivo.
Passaggi principali per ottenere l'elenco delle email:
- Connessione al server di posta.
- Autenticazione.
- Ottenere l'elenco delle email.
- Scaricamento e lettura delle email.
- Disconnessione dal server.
Per scrivere la prima applicazione avremo bisogno di due librerie: poplib
e email
. Se non le hai — installale. Sai già come usare il gestore pip
.
Importante: Quando lavori con le email, segui sempre le misure di sicurezza. Non memorizzare mai le password in chiaro nel codice. Usa variabili d'ambiente o archivi sicuri per le credenziali. Inoltre, assicurati che il tuo codice non diventi pubblico per evitare perdite di informazioni riservate.
1. Connessione e autenticazione:
Connettiamo al server di posta tramite SSL
ed effettuiamo l'accesso alla casella di posta con le credenziali fornite.
mailbox = poplib.POP3_SSL(pop3_server)
mailbox.user(username)
mailbox.pass_(password) # Usiamo pass_ per evitare conflitti con la parola chiave pass in Python
2. Ottenere informazioni sulla casella di posta:
Otteniamo il numero di email nella casella di posta.
num_messages = len(mailbox.list()[1])
print(f"Numero di email: {num_messages}")
3. Scaricamento e lettura delle email:
Scarichiamo e leggiamo l'ultima email.
# Esempio: Lettura dell'ultima email
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("Contenuto dell'ultima email:")
print(message)
Per il parsing e la visualizzazione del contenuto esiste una libreria speciale — email
. Può decodificare il contenuto delle email e degli allegati, inclusi intestazioni e corpo dell'email.
Ecco come apparirà la versione finale del nostro client di posta.
import poplib
# Credenziali di accesso
username = 'your_email@example.com'
password = 'your_password'
# Connessione al server di posta Gmail
pop3_server = 'pop.gmail.com'
mailbox = poplib.POP3_SSL(pop3_server, 995)
# Accesso alla casella di posta
mailbox.user(username)
mailbox.pass_(password) # Usiamo pass_ per evitare conflitti con la parola chiave pass in Python
# Ottenere informazioni sulla casella di posta
num_messages = len(mailbox.list()[1])
print(f"Numero di email: {num_messages}")
# Esempio: Lettura dell'ultima email
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("Contenuto dell'ultima email:")
print(message)
# Chiusura della connessione
mailbox.quit()
Puoi provare a leggere le tue email, basta indicare il corretto POP3-server
. Ad esempio, nel caso sopra ho specificato i dati del server Gmail. Se hai un altro server di posta, i dati possono essere facilmente trovati su internet.
8.2 Inviare email
Per inviare email usando il protocollo SMTP
(Simple Mail Transfer Protocol) in Python, puoi utilizzare la libreria integrata smtplib
. Questo modulo fornisce funzioni per stabilire una connessione con SMTP-server
, autenticarsi e inviare email.
Passaggi principali per l'invio di email:
- Connessione al
SMTP-server
. - Autenticazione.
- Formazione del messaggio.
- Invio del messaggio.
- Chiusura della connessione.
1. Connessione al SMTP-server
:
Ci colleghiamo al SMTP-server
e passiamo a una connessione sicura con TLS
.
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Connessione sicura
2. Autenticazione:
Efettuiamo l'accesso al SMTP-server
utilizzando le credenziali.
server.login(username, password)
3. Formazione di un semplice messaggio in formato stringa:
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
4. Invio del messaggio:
server.sendmail(from_addr, to_addr, message)
5. Chiusura della connessione:
server.quit()
Sembra più semplice dell'ultima volta, il che è sempre una buona cosa.
Il codice completo con la gestione degli errori sarà così:
import smtplib
# Credenziali di accesso
smtp_server = 'smtp.gmail.com'
smtp_port = 587
username = 'your_email@gmail.com'
password = 'your_app_password' # Usa una password dell'applicazione
# Indirizzi del mittente e del destinatario
from_addr = 'your_email@gmail.com'
to_addr = 'recipient@example.com'
# Oggetto e corpo dell'email
subject = 'Oggetto dell'email'
body = 'Questo è il testo dell'email.'
# Formazione del messaggio in formato stringa
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
try:
# Connessione al server SMTP
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Connessione sicura
# Autenticazione
server.login(username, password)
# Invio del messaggio
server.sendmail(from_addr, to_addr, message)
print("Email inviata con successo!")
except Exception as e:
print(f"Errore durante l'invio dell'email: {e}")
finally:
# Chiusura della connessione
server.quit()
La maggior parte del codice qui sono commenti e impostazioni del server, davvero puoi inviare un'email in 5 righe. Provaci — è molto interessante.
GO TO FULL VERSION