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 è abbastanza semplice e facile da fare. Anche quando dobbiamo utilizzare alcuni modelli predefiniti, Python ci aiuta a sostituire i valori dei segnaposto con i dati effettivi in ​​modo che l'e-mail finale sembri 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 faccio e altro ancora.

Cosa faremo?

Creeremo un semplice programma Python che farà quanto segue:

  • Usa il file modello che creiamo per la progettazione e -mail. Questo sarà solo un file basato sul testo con valori di segnaposto.
  • Ottieni il nome ed e -mail della persona da un altro file di testo che facciamo.

Questi punti rendono questo programma molto più vicino a un utilizzo della vita reale di inviare e-mail nelle tue app. Iniziamo.

File per e -mail

Il file che contiene le e -mail per gli utenti sembrerà così:

Shubham [email protected]

Questo è solo un semplice file di testo che contiene il nome dell'utente e l'e -mail separati dallo spazio. Sono state inserite più e -mail con i dati di ciascun utente in una nuova riga. Abbiamo chiamato questo file utenti.TXT.

Usando il modello

Definiamo rapidamente anche il modello che useremo nel nostro script per sostituire i valori:

Ciao $ persona_name,
Abbiamo inviato questa e -mail utilizzando il modulo Python Smtplib. Cool, giusto?
Buona giornata in anticipo!
Saluti

Abbiamo usato una stringa modello $ Person_name che verrà sostituito con il nome della persona che otteniamo dagli utenti.file txt durante l'invio dell'email.

Ottenere i dati dell'utente dal file

Il primo passo per inviare e -mail a un utente è identificarlo in cui vogliamo inviare le e -mail. Scriviamo una funzione Python che accetterà un nome di file e restituisce il nome degli utenti e gli ID e -mail in cui le e -mail devono essere inviate:

def get_users_data (file_name):
user_name = []
user_email = []
con open (file_name, modalità = 'r', encoding = 'utf-8') come user_file:
per user_info in user_file:
nome utente.append (user_info.split () [0])
user_email.append (user_info.split () [1])
return user_name, user_email

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

Ottenere l'oggetto modello

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

def read_template (file_name):
con open (file_name, 'r', codifica = 'utf-8') come msg_template:
msg_template_content = msg_template.Leggere()
modello di ritorno (msg_template_content)

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

Come viene eseguita l'invio e -mail?

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 connessione SMTP con le credenziali di accesso per l'account del mittente
  • Costruire un'intestazione in più parti con informazioni con campi da soggetto
  • Costruire il corpo del messaggio che deve essere inviato
  • Invia l'e -mail con oggetto di connessione SMTP

Impostazione della connessione SMTP

Definiamo finalmente la funzione che invierà l'e -mail agli utenti designati. Ecco la funzione:

def main ():
user_name, user_email = get_users_data ('utenti.txt ') # Leggi i dettagli dell'utente
message_template = read_template ('messaggio.TXT')
# imposta il server SMTP
Smtplib_Server = Smtplib.SMTP (host = 'SMTP.gmail.com ', porta = 587)
Smtplib_Server.starttls ()
Smtplib_Server.Accedi (send_from, email_pwd)
# Ottieni ogni dettaglio dell'utente e invia l'e -mail:
Per il nome, e -mail in zip (user_name, user_email):
multipart_message = mimemultiPart () # Crea un messaggio
# Aggiungi il nome della persona reale al modello di messaggio
msg = message_template.sostituto (persona_name = nome.titolo())
# Stampa il corpo del messaggio per il nostro bene
Stampa (MSG)
# imposta i parametri del messaggio
multipart_message ['from'] = sent_from
multipart_message ['to'] = email
multipart_message ['soggetto'] = "email LinuxHint"
# Aggiungi il corpo del messaggio
multipart_message.Allegato (MimeText (MSG, 'Plain'))
# Invia il messaggio tramite il server impostato in precedenza.
Smtplib_Server.Send_Message (multipart_message)
Del Multipart_Message
# Termina la sessione SMTP e chiudi la connessione
Smtplib_Server.esentato()

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

Programma completo

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

Importa Smtplib
dal modello di importazione stringa
dall'email.mimo.multipart import mimemultipart
dall'email.mimo.Importa di testo MimeText
Send_from = 'my-email-here'
Email_pwd = 'my-password-here'
def get_users_data (file_name):
user_name = []
user_email = []
con open (file_name, modalità = 'r', encoding = 'utf-8') come user_file:
per user_info in user_file:
nome utente.append (user_info.split () [0])
user_email.append (user_info.split () [1])
return user_name, user_email
def read_template (file_name):
con open (file_name, 'r', codifica = 'utf-8') come msg_template:
msg_template_content = msg_template.Leggere()
modello di ritorno (msg_template_content)
def main ():
user_name, user_email = get_users_data ('utenti.txt ') # Leggi i dettagli dell'utente
message_template = read_template ('messaggio.TXT')
# imposta il server SMTP
Smtplib_Server = Smtplib.SMTP (host = 'SMTP.gmail.com ', porta = 587)
Smtplib_Server.starttls ()
Smtplib_Server.Accedi (send_from, email_pwd)
# Ottieni ogni dettaglio dell'utente e invia l'e -mail:
Per il nome, e -mail in zip (user_name, user_email):
multipart_message = mimemultiPart () # Crea un messaggio
# Aggiungi il nome della persona reale al modello di messaggio
msg = message_template.sostituto (persona_name = nome.titolo())
# Stampa il corpo del messaggio per il nostro bene
Stampa (MSG)
# imposta i parametri del messaggio
multipart_message ['from'] = sent_from
multipart_message ['to'] = email
multipart_message ['soggetto'] = "email LinuxHint"
# Aggiungi il corpo del messaggio
multipart_message.Allegato (MimeText (MSG, 'Plain'))
# Invia il messaggio tramite il server impostato in precedenza.
Smtplib_Server.Send_Message (multipart_message)
Del Multipart_Message
# Termina la sessione SMTP e chiudi la connessione
Smtplib_Server.esentato()
Se __Name__ == '__main__':
principale()

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

Errore Gmail SMTP


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

Conclusione

In questa lezione, abbiamo esaminato come possiamo inviare e -mail usando Python Smtplib modulo.