Python - Invio di Email

Ciao a tutti, aspiranti programmatori Python! Oggi ci imbarcheremo in un viaggio avventuroso nel mondo dell'invio di email utilizzando Python. Come vostra insegnante di computer amichevole, sono entusiasta di guidarvi attraverso questo processo. Credetemi, alla fine di questo tutorial, invierete email come un professionista!

Python - Sending Email

Invio di Email in Python

Iniziamo dalle basi. Inviare email in Python è come essere un postino digitale, ma invece di andare porta a porta, utilizziamo una libreria speciale chiamata smtplib. SMTP sta per Simple Mail Transfer Protocol, che è solo un modo elegante di dire "le regole per inviare posta tramite Internet".

Ecco un esempio semplice per iniziare:

import smtplib

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"
message = "Hello, this is a test email from Python!"

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

Spiegazione:

  1. Importiamo la libreria smtplib.
  2. Configuriamo la nostra email del mittente, del destinatario e la password.
  3. Creiamo un messaggio semplice.
  4. Connettiamoci al server SMTP di Gmail (più dettagli a riguardo più avanti).
  5. Iniziamo TLS per la sicurezza.
  6. Accediamo al nostro account email.
  7. Infine, inviamo l'email!

Funzione Python smtplib.SMTP()

La funzione SMTP() è come la chiave per la nostra ufficio postale digitale. Stabilisce una connessione al server SMTP che vogliamo utilizzare. Ecco un'analisi più dettagliata:

import smtplib

server = smtplib.SMTP('smtp.gmail.com', 587)
print(server.ehlo())
server.starttls()
print(server.ehlo())

In questo esempio:

  • Creiamo un oggetto SMTP per il server di Gmail.
  • ehlo() è come dire "ciao" al server.
  • starttls() inizia la crittografia TLS per la sicurezza.

Modulo Python smtpd

Mentre smtplib è per inviare email, smtpd è per riceverle. È come configurare il proprio piccolo server email! Ecco un esempio semplice:

import asyncore
from smtpd import SMTPServer

class EmailServer(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print(f'Receiving message from: {peer}')
print(f'Message addressed from: {mailfrom}')
print(f'Message addressed to  : {rcpttos}')
print(f'Message length        : {len(data)}')

server = EmailServer(('localhost', 1025), None)
asyncore.loop()

Questo configura un server email di base che stampa informazioni sugli email ricevuti. È come avere la propria stanza di smistamento posta personale!

Invio di un'Email HTML utilizzando Python

Ora, rendiamo le nostre email eleganti con un po' di HTML:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"

message = MIMEMultipart("alternative")
message["Subject"] = "multipart test"
message["From"] = sender_email
message["To"] = receiver_email

text = "Hi there! This is a plain text email."
html = """\
<html>
<body>
<p>Hi there!<br>
This is an <b>HTML</b> email.
</p>
</body>
</html>
"""

part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

message.attach(part1)
message.attach(part2)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

Questo esempio invia un'email con sia versioni di testo semplice che HTML. È come inviare una lettera con un envelope elegante!

Invio di Allegati come Email

E se volessimo inviare un file insieme alla nostra email? Nessun problema! Ecco come fare:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

sender_email = "[email protected]"
receiver_email = "[email protected]"
password = "your_password"

message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "Email with attachment"

body = "This is an email with an attachment."
message.attach(MIMEText(body, "plain"))

filename = "document.pdf"  # Sostituire con il nome del file
attachment = open(filename, "rb")

part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())

encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
f"attachment; filename= {filename}",
)

message.attach(part)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())

Questo script allega un file alla vostra email. È come aggiungere un pacco alla vostra lettera!

Invio di Email Utilizzando il Server SMTP di Gmail

Attraverso questo tutorial, abbiamo utilizzato il server SMTP di Gmail. Ecco una tabella di riferimento rapida per i server SMTP comuni:

Provider Email Server SMTP Porta
Gmail smtp.gmail.com 587
Outlook smtp-mail.outlook.com 587
Yahoo Mail smtp.mail.yahoo.com 587

Ricorda, quando utilizzi Gmail, potresti dover abilitare l'accesso a "App meno sicure" o utilizzare una "Password App" se hai l'autenticazione a due fattori abilitata.

Eccoci! Ora siete equipaggiati per inviare email come un professionista Python. Ricorda, con grandi poteri vengono grandi responsabilità - utilizza le tue nuove competenze di invio email con saggezza! Buon coding, e che le tue email raggiungano sempre la loro destinazione!

Credits: Image by storyset