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:
- Usa il file modello che creiamo per il design dell'email. Questo sarà solo un file di testo con valori segnaposto.
- Ottieni il nome e l'e-mail della persona da un altro file di testo che creiamo.
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:
- Crea una connessione SMTP con le credenziali di accesso per l'account del mittente
- Costruisci un'intestazione multiparte con informazioni con i campi Da, A e Oggetto
- Costruisci il corpo del messaggio che deve essere inviato
- Invia l'email con l'oggetto connessione SMTP
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 smtplibda 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.