Pitone

Invio di un'e-mail in Python

Invio di un'e-mail in Python
L'invio di un'e-mail è una delle attività più comuni che devo svolgere nelle applicazioni web e in altri progetti che creo. Con Python, questa è una cosa abbastanza semplice e facile da fare. Anche quando abbiamo bisogno di utilizzare alcuni modelli predefiniti, Python ci aiuta a sostituire i valori segnaposto con dati reali in modo che l'e-mail finale appaia elegante e piena di dettagli che rendono felice il mio cliente.

In questa lezione condividerò lo script che utilizzo per inviare e-mail agli utenti delle app che creo e altro.

Cosa faremo?

Creeremo un semplice programma Python che farà quanto segue:

Questi punti rendono questo programma molto più vicino a un utilizzo reale dell'invio di e-mail nelle tue app. Iniziamo.

File per e-mail

Il file che contiene le email per gli utenti sarà simile a questo:

Shubham [email protected]

Questo è solo un semplice file di testo che contiene il nome dell'utente e l'e-mail separati da uno spazio. Più email sono state messe con i dati di ciascun utente in una nuova riga. Abbiamo chiamato questo file utenti.TXT.

Utilizzo del modello

Definiamo rapidamente anche il modello che utilizzeremo nel nostro script per la sostituzione dei valori:

Ciao $PERSON_NAME,
Abbiamo inviato questa email utilizzando il modulo smtplib di Python Python. Bello, giusto??
Aspetta una giornata luminosa!
Saluti

Abbiamo usato una stringa modello $PERSON_NAME che verrà sostituito con il nome della persona che riceviamo dagli utenti.txt durante l'invio dell'e-mail.

Ottenere dati utente da file

Il primo passo per inviare e-mail a un utente è identificare dove vogliamo inviare le e-mail. Scriviamo una funzione Python che accetterà un nome file e ci restituirà il nome utente e gli ID email a cui inviare le email:

def get_users_data(nome_file):
nome_utente = []
email_utente = []
con open(file_name, mode='r', encoding='utf-8') come user_file:
per user_info in user_file:
nome utente.append(user_info.dividere()[0])
email_utente.append(user_info.dividere()[1])
restituisce nome_utente, email_utente

Con questa funzione, restituiamo solo i nomi e le e-mail dell'utente che otteniamo dal file.

Ottenere l'oggetto modello

Ora possiamo analizzare il nostro modello e ottenere un oggetto modello dal file di testo che abbiamo creato:

def read_template(nome_file):
con open(file_name, 'r', encoding='utf-8') come msg_template:
msg_template_content = msg_template.leggere()
restituire il modello (msg_template_content)

Con questo, otterremo un oggetto Template che possiamo usare per analizzare il contenuto del file e fare le sostituzioni necessarie per le stringhe del modello come il nome di un utente.

Come avviene l'invio di email?

Ora che siamo pronti con il design del modello e i dati dell'utente, dobbiamo capire come viene effettivamente inviata un'e-mail all'utente:

Configurazione della connessione SMTP

Definiamo infine la funzione che invierà la mail agli utenti designati. Ecco la funzione:

def principale():
nome_utente, email_utente = get_users_data('users.txt') # leggi i dettagli dell'utente
message_template = read_template('message.TXT')
# configura il server SMTP
smtplib_server = smtplib.SMTP(host='smtp.gmail.com', porta=587)
smtplib_server.inizio()
smtplib_server.accesso(SEND_FROM, EMAIL_PWD)
# Ottieni i dettagli di ciascun utente e invia l'e-mail:
per nome, email in zip(nome_utente, email_utente):
multipart_message = MIMEMultipart() # crea un messaggio
# aggiungi il nome effettivo della persona al modello del messaggio
msg = message_template.sostituto(NOME_PERSONA=nome.titolo())
# Stampa il corpo del messaggio per il nostro bene
stampa (messaggio)
# imposta i parametri del messaggio
multipart_message['From']=SEND_FROM
multipart_message['To']=email
multipart_message['Subject']="LinuxHint Email"
# aggiungi nel corpo del messaggio
messaggio_multiparte.attach(MIMEtext(msg, 'normale'))
# invia il messaggio tramite il server configurato in precedenza.
smtplib_server.send_message(multipart_message)
del multipart_message
# Termina la sessione SMTP e chiudi la connessione
smtplib_server.smettere()

Nella funzione sopra, abbiamo seguito ogni passaggio indicato nella sezione precedente. Abbiamo costruito la connessione SMTP e l'abbiamo usata per inviare l'e-mail.

Programma completo

Nella sezione finale, diamo uno sguardo al programma completo che può essere utilizzato per inviare l'e-mail all'utente designato:

import smtplib
da modello di importazione di stringhe
dall'email.mimo.importazione multiparte MIMEMultipart
dall'email.mimo.importazione testo MIMEtext
SEND_FROM = 'mia-e-mail-qui'
EMAIL_PWD = 'la mia-password-qui'
def get_users_data(nome_file):
nome_utente = []
email_utente = []
con open(file_name, mode='r', encoding='utf-8') come user_file:
per user_info in user_file:
nome utente.append(user_info.dividere()[0])
email_utente.append(user_info.dividere()[1])
restituisce nome_utente, email_utente
def read_template(nome_file):
con open(file_name, 'r', encoding='utf-8') come msg_template:
msg_template_content = msg_template.leggere()
restituire il modello (msg_template_content)
def principale():
nome_utente, email_utente = get_users_data('users.txt') # leggi i dettagli dell'utente
message_template = read_template('message.TXT')
# configura il server SMTP
smtplib_server = smtplib.SMTP(host='smtp.gmail.com', porta=587)
smtplib_server.inizio()
smtplib_server.accesso(SEND_FROM, EMAIL_PWD)
# Ottieni i dettagli di ciascun utente e invia l'e-mail:
per nome, email in zip(nome_utente, email_utente):
multipart_message = MIMEMultipart() # crea un messaggio
# aggiungi il nome effettivo della persona al modello del messaggio
msg = message_template.sostituto(NOME_PERSONA=nome.titolo())
# Stampa il corpo del messaggio per il nostro bene
stampa (messaggio)
# imposta i parametri del messaggio
multipart_message['From']=SEND_FROM
multipart_message['To']=email
multipart_message['Subject']="LinuxHint Email"
# aggiungi nel corpo del messaggio
messaggio_multiparte.attach(MIMEtext(msg, 'normale'))
# invia il messaggio tramite il server configurato in precedenza.
smtplib_server.send_message(multipart_message)
del multipart_message
# Termina la sessione SMTP e chiudi la connessione
smtplib_server.smettere()
if __name__ == '__main__':
principale()

Quando eseguiamo questo programma con un ID Gmail, potresti riscontrare un problema come questo:

Errore SMTP di Gmail


Questo perché Gmail non consente agli script semplici di utilizzare l'API di Gmail. Per questo, potresti dover disabilitare l'accesso di sicurezza nel tuo account Gmail. Leggi come farlo per Gmail qui.

Conclusione

In questa lezione, abbiamo esaminato come inviare e-mail utilizzando Python smtplib modulo.

I migliori giochi da riga di comando per Linux
La riga di comando non è solo il tuo più grande alleato quando usi Linux, ma può anche essere una fonte di intrattenimento perché puoi usarla per gioc...
Le migliori app di mappatura del gamepad per Linux
Se ti piace giocare su Linux con un gamepad invece di un tipico sistema di input di tastiera e mouse, ci sono alcune app utili per te. Molti giochi pe...
Strumenti utili per i giocatori Linux
Se ti piace giocare su Linux, è probabile che tu abbia utilizzato app e utilità come Wine, Lutris e OBS Studio per migliorare l'esperienza di gioco. O...