Invio di e -mail con Python

Invio di e -mail con Python
Inviare, controllare e rispondere alle e -mail è un'attività che richiede tempo, soprattutto quando lo fai per un gran numero di persone o clienti in cui devi solo cambiare il nome, l'indirizzo, l'età e altre piccole cose del destinatario. Sarebbe un compito molto difficile per te scrivere un programma in grado di gestire tutti i tipi delle tue e -mail personali/aziendali, ma puoi comunque automatizzare un sacco di cose a questo proposito che alla fine ti farà risparmiare molto tempo.

Ad esempio, si desidera inviare un promemoria ai tuoi clienti per le loro fatture rimanenti e hai tutti i dati relativi ai clienti come i loro numeri di telefono, indirizzo, età ecc. Programma semplice in Python per farlo automaticamente per te. In questo tutorial, impareremo come funziona il protocollo e -mail e come puoi automatizzare il processo per risparmiare tempo prezioso.

Una parola su SMTP

Simple Mail Transfer Protocol (SMTP) è computerizzato equivalente al servizio postale. È un protocollo che funziona sul livello dell'applicazione di una rete TCP/IP. È un protocollo standard per l'invio e la ricezione di e -mail su Internet. Il processo di trasferimento di posta consiste in server di posta elettronica e clienti che inviano e ricevono e -mail l'uno all'altro.

Ad esempio, hai un account Gmail e vuoi inviare un'e -mail al tuo amico sul suo account Yahoo. Scrivi un'e -mail e premi invio, ma il processo di backend è un po 'complicato e per capire questo processo, dovrai prima capire SMTP. Il tuo client di posta elettronica SMTP invia per la prima volta Helo (O Ehlo) al server Gmail, puoi dire che questo comando o intestazione è equivalente a Ospite Intestazione nel protocollo HTTP e viene utilizzata per identificare il server utilizzando il nome di dominio. Dopo Helo o Ehlo, il client si autentica sul server con il nome utente e la password forniti utilizzati AUTH comando. Quindi specifica l'indirizzo e -mail del mittente e del destinatario e quindi il corpo del messaggio e invia e -mail al server Gmail. Gmail Server confermerà innanzitutto che se l'indirizzo e -mail del destinatario su Yahoo esiste o no, quindi invierà l'e -mail a Yahoo Server in cui il destinatario può recuperare le sue e -mail da.

Smtplib

SMTPLIB è una libreria Python che può essere utilizzata come client SMTP proprio come Gmail, Yahoo, Thunderbird o qualsiasi altro client di posta elettronica e può essere utilizzato per inviare e -mail. Possiamo eseguire tutte le attività utilizzando il client SMTPLIB che possiamo fare con coloro che hanno un'interfaccia utente grafica.

Viene per impostazione predefinita in Python, nel caso in cui non lo hai quindi puoi installare utilizzando il comando seguente.

ubuntu@ubuntu: ~ $ pip Installa Smtplib

O in Python3

ubuntu@ubuntu: ~ $ pip Installa Smtplib

Scrivere la tua prima email con Python

In questo tutorial, userò un account Gmail come mittente, anche io farò uso della console Python, quindi sarà più facile per me spiegare ogni riga di codice passo per passo. Per iniziare, dobbiamo consentire al nostro accesso Gmail ad app meno sicure.

Quindi accedi al tuo account Gmail e poi vai alle impostazioni dell'account.

Ora assicurati che l'accesso per le app meno sicuro sia attivato.

Ora apri la tua console Python e inizia a scrivere la tua prima email utilizzando Python

ubuntu@ubuntu: ~ $ python
Python 2.7.16 (impostazione predefinita, 7 ottobre 2019, 17:36:04)
[GCC 8.3.0] su Linux2

Digita "Guida", "Copyright", "Credit" o "Licenza" per ulteriori informazioni.

// Importa la libreria SMTP
>>> Importa smtplib
// Connettiti al server Gmail con nome di dominio e numero di porta (questa impostazione differisce per
Ogni fornitore di posta elettronica, dai un'occhiata al tavolo indicato di seguito)
>>> MailObj = Smtplib.SMTP ('SMTP.gmail.com ', 587)
// saluta il server
>>> MailObj.ehlo ()
(250, 'SMTP.gmail.com al tuo servizio, [103.255.4.246] \ nsize35882577 \ n8bitmime \ nstartttls \
NenHitedStatuSusdes \ npipelining \ nchunking \ nsmtputf8 ')
// port 587 significa che stiamo usando la connessione TLS crittografata, quindi avvia TLS crittografati
Comunicazione usando startTls (), in modo che le nostre credenziali e i nostri messaggi non vengano annusati
>>> MailObj.starttls ()
(220, '2.0.0 Pronto per iniziare TLS ')
// Accedi al tuo account Gmail utilizzando e -mail e password
>>> MailObj.Accedi ('[email protected] ',' s3cr3t_p4sw0rd ')
(235, '2.7.0 accettato ')
// Specifica l'indirizzo e -mail e il contenuto e -mail del mittente e del destinatario
>>> MailObj.sendmail ('[email protected] ',' [email protected] '', soggetto:
Ciao mondo! \ n Hello World! Questa è la mia prima e -mail Hello World in Python ')

// Chiudi connessione al server Gmail
>>> MailObj.esentato()
(221, '2.0.0 Connessione di chiusura B6SM4519863LFI.72 - GSMTP ')

Nel programma di esempio di cui sopra, sostituire il contenuto fornito con il proprio. Se non sei un utente Gmail, puoi utilizzare il server di posta elettronica del tuo provider. Ecco l'elenco dei nomi di dominio e delle porte di alcuni comuni fornitori di posta.

Nome Nome del dominio del server Porta
Gmail Smtp.gmail.com 587
Outlook / Hotmail SMTP-MAIL.veduta.com 587
Yahoo Mail Smtp.posta.Yahoo.com 587
Verizon Smtp.Verizon.netto 465
Comcast Smtp.Comcast.netto 587

Alcune parole su IMAP

Quindi abbiamo appena studiato che SMTP viene utilizzato per inviare e -mail, ma per cosa è IMAP (protocollo di messaggistica di accesso a Internet) per? SMTP non può essere utilizzato per cercare e ricevere e -mail dal protocollo server, IMAP o POP3 viene utilizzato a tale scopo.

Imapclient, imaplib e pyzmail

Ci sono due grandi librerie in Python che possono essere utilizzate come client IMAP per trovare, recuperare ed eliminare le e -mail dal server di posta. Python ha impostazione predefinita imaplib libreria ma un'altra libreria esterna imapclient è più efficace e facile da usare. In questo tutorial useremo imapclient Per recuperare le e -mail dal server di posta.

Il problema con imapclient è che recupera le e -mail da Mail Server in formato RAW. Quindi, avremo bisogno Pyzmail Libreria come parser per output intuitivo. Per installare entrambe le librerie, digita

ubuntu@ubuntu: ~ $ sudo pip Installa imapclient
ubuntu@ubuntu: ~ $ sudo pip installa pyzmail

Ottenere le tue e -mail da Mail Server

Ora impareremo come cercare e scaricare e -mail dal server di posta utilizzando ImapClient. Useremo ImapClient per cercare e scaricare le e -mail dal server, quindi useremo Pyzmail per analizzare questo contenuto grezzo. Leggiamo

// Importa libreria imapclient
>>> Importa ImapClient
// Connettiti al server IMAP di Gmail
>>> obj = imapclient.Imapclient ('imap.gmail.com ', ssl = true)
// Accedi al tuo account e -mail utilizzando le tue credenziali
>>> OBJ.Login ('[email protected] ',' s3cr4tp4ss ')
'[email protected] autenticato (successo) '
// Seleziona la cartella dei messaggi per leggere i.E Posta in arrivo, bozze, inviato posta
>>> OBJ.Select_Folder ('Inbox', readOnly = true)
'Esiste': 830, 'permanentflags': (), 'HighSmodSeq': 112999, 'UidNext': 931,
'Flags': ('\\ rispose', '\\ flagged', '\\ bozza', '\\ eliminato', '\\ visto',
'$ Nonfishing', '$ phishing'), 'uidvalidità': 1, 'lettura di sola': ["], 'recente: 0
// Cerca i tuoi messaggi nella posta in arrivo o applicherà un filtro, sotto il filtro mostrerà
IL MASSIONI RICEVOLITE dopo il 25-ott-2019
>>> mail_ids = obj.Search (['da quando', '25 -oct-2019 '])
>>> Mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// L'elenco "Mail_ids" contiene un elenco di ID e-mail ricevuti dal 25-ott-2019,
Puoi scaricare un'e -mail utilizzando la funzione di recupero imapclient.
>>> raw_mail = obj.fetch ([919], ['body []', 'bands'])
// Ora, il contenuto nella variabile raw_mail è in formato grezzo, non può essere visualizzato su
Schermo direttamente, quindi avremmo bisogno di un parser per analizzare questo contenuto per un output intuitivo
>>> Importa pyzmail
>>> messaggio = pyzmail.Pyzmessage.fabbrica (raw_mail [919] ['body []'])
// Ora l'e -mail viene analizzata e archiviata nella variabile di messaggio, per ottenere l'oggetto di
l'email, usa la funzione get_subject
>>> messaggio.get_subject ()
Abbassi le tue abilità questo Halloween con uno sconto del 25%
// Allo stesso modo, puoi vedere i dettagli del mittente
>>> messaggio.get_addresses ('from')
[(U'usama Azad ',' [email protected] ')]
>>> messaggio.get_addresses ('to')
[(U'[email protected] ',' [email protected] ')]
// per ottenere il corpo dell'e -mail, digita
>>> messaggio.text_part.get_payload ().decodifica (messaggio.text_part.chatset)
u "ciao! Goditi il ​​25% piatto sui nostri corsi premium "

Se hai un account in qualche altro provider di servizi di posta elettronica diversi da Gmail, puoi accedere al loro server IMAP. Ecco l'elenco dei nomi del dominio IMAP di alcuni famosi provider di posta.

Fornitore Nome di dominio per server IMAP
Yahoo IMAP.posta.Yahoo.com
Hotmail/Outlook IMAP-MAIL.veduta.com
Verizon in arrivo.Verizon.netto
Comcast IMAP.Comcast.netto
At & t IMAP.posta.Att.netto

Eliminazione della tua email dal server IMAP

Simile alla ricerca e al recupero delle e -mail dal server, puoi anche eliminare le e -mail dal tuo server di posta utilizzando il loro UID. Segui solo i passaggi indicati

// Per eliminare un'e -mail, devi girare leggi solo a "falso" per ottenere l'accesso alla scrittura al tuo
e -mail
>>> OBJ.Select_Folder ('Inbox', readOnly = false)
>>> mail_ids = obj.Search (['da quando', '25 -oct-2019 '])
>>> Mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Fornisci un UID e -mail o un elenco di UID e -mail, dopo aver eseguito il comando sotto,
La tua email sarà scomparsa dalla posta in arrivo.
>>> OBJ.delete_messages (919)
919: ('\\ sew', '\\ cancellato')
// Questo comando eliminerà permanentemente le tue e -mail dal server di posta
>>> OBJ.espunge ()
('Successo', [])

https: // techtopz.com/build-a-birthday-reminder-appplication-in-python-on-mac/

Inventare il tuo promemoria di compleanno

Hai compleanni dei tuoi amici nei prossimi mesi e vuoi augurare loro i loro compleanni. Ma hai molto lavoro nel tuo ufficio e c'è la possibilità che ti dimenticherai di augurargli. Quindi questa attività può essere eseguita automaticamente usando Python. Di seguito è riportato il codice per eseguire questa attività.

// Importazione di moduli
importazione re
// Il modulo OS viene utilizzato per eseguire le attività del sistema operativo i.E Accesso alle directotorie
Import OS
Importa DateTime
Importa Smtplib
// Definizione di una funzione che invierà e -mail
def send_mail (reciever_mail_address, nome):
SENDER_MAIL_ADDREST = "[email protected] "
Passwd = "SenderPasswd"
// Connessione al server Gmail con nome di dominio e numero di porta
OBJ = Smtplib.SMTP ('SMTP.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// Accesso al tuo account Gmail
obj.Login (Sender_Mail_Address, passwd)
// Invio di posta a 'Reciever_mail_address'.
obj.SendMail (Sender_Mail_Address, Reciever_Mail_Address, "Oggetto: Birthday Wishing Mail \ n \ n HappyBirthDay"+nome)
// Connessione finale
obj.esentato()
// Corpo principale
// andando alla directory in cui è presente il file contenente dati
sistema operativo.chdir ("path_to_birthday_data_file")
mentre 1:
// Ottenere la data e l'ora del momento presente
oggi = datetime.appuntamento.Oggi()
oggi = STR (oggi)
// Ottenere anno, mese, giorno, ora, minuto e secondo
Current_year = oggi [0: 4]
current_month = oggi [5: 7]
Current_day = oggi [8:10]
Current_hour = oggi [11:13]
current_minute = oggi [14:16]
Current_Sec = oggi [17:19]
// Apertura del file di compleanno in oggetto 'Birthday_file' in modalità lettura
Birthday_File = Open ('Birthday_File', 'R')
// Salvare tutte le linee di "Birthday_file" nell'elenco delle righe
linee = Birthday_file.readlines ()
// Chiusura dell'oggetto 'Birthday_File'
Birthday_file.vicino()
// Leggendo ogni riga utilizzando per loop
per la linea in righe:
// fare un'espressione regolare per trovare un appuntamento in 'Birthday_File'
dateex = re.compile (r "\ d 4-\ d 2-\ d 2")
FindDate = DateEx.Cerca (riga)
Date = FindDate.gruppo()
// Ottenere Birthday_Month e Birthday_day dal file
Birthday_Month = Data [5: 7]
Birthday_day = Data [8:10]
// Fare un'espressione regolare per trovare l'indirizzo di posta da Birthday_File
Mailex = re.Compila (r "\ w*@\ w*.com ")
FindMail = Mailex.Cerca (riga)
reciever_mail = findmail.gruppo()
// fare un'espressione regolare per trovare il nome della persona
nameex = re.Compile (r "\ w*")
findName = nameex.Cerca (riga)
name = findname.gruppo()
// controlla se il compleanno di qualcuno sta arrivando o no
Se current_month == Birthday_Month e = Current_Day == Birthday_day:
// Invio di posta alle 08:00 esatti
Se current_hour == '08' e current_minute == '00' e current_sec == '00':
// Chiama la funzione "Send_mail"
Send_mail (Reciever_Mail, nome)

Ora realizziamo un "Birthday_File", in cui salviamo nomi, indirizzi e -mail e la loro data di nascita. Questo è un semplice file di testo e sembra questo.

Spiegazione

Leggeremo questo file usando lo script Python e controlleremo il cui compleanno sta arrivando e lo auguriamo. Prima di tutto importeremo alcuni moduli. Il modulo DateTime ha funzioni che ci danno la data e l'ora correnti e molte altre. Ma lo useremo solo per trovare la data e l'ora correnti. Il modulo SMTPLIB viene utilizzato per inviare posta ed è stato spiegato sopra. Re Module ha funzioni che vengono utilizzate per trovare un'espressione regolare da una stringa.

In questo script, definiamo la funzione "Send_mail", che invia la posta a "Reciever_mail_address", il cui nome è "nome". Entrambi gli argomenti vengono passati alla funzione dal corpo principale di MSG. Nel corpo principale della sceneggiatura vedremo come troviamo "reciever_mail_address" e "nome".

L'invio di e -mail utilizzando SMTPLIB è stata spiegata sopra, in modo da poterlo leggere e non sarà discusso qui.

Nel corpo principale, andiamo alla directory in cui abbiamo salvato "Birthday_file" usando "OS.chdir () '. Quindi abbiamo un "while loop" che è sempre vero, quindi controllerà continuamente il compleanno. Ora otteniamo la data e l'ora correnti e lo salviamo nella variabile "Today". Sembra questo.

2019-11-01 16:19:07.144925

Estrarremo l'anno, il mese, il giorno, le ore, i minuti e i secondi usando gli indici di queste quantità. Dopo questo, apriremo Birthday_File in un oggetto "Birthday_File" in modalità lettura, quindi possiamo solo leggerlo. Ora salveremo tutte le righe di questo file nell'elenco delle righe. 'Birthday_file.readlines () "salverà ogni riga nell'elenco" righe ". Dopo questo chiuderemo Birthday_File usando 'Birthday_file.Funzione Close () '.

Ora leggeremo ogni riga uno per uno usando per loop. In ogni riga solo i dati di una persona sono disponibili in "Birthday_file", quindi stiamo leggendo solo i dati di una persona contemporaneamente in questo loop.

Dopo questo, estrarremo la data di nascita, l'indirizzo e -mail e il nome della persona che utilizza il modulo RE. Come abbiamo scritto la data nel seguente formato

YYYY-MM-DD

Quindi faremo un'espressione regolare "dateex" che trova questo formato nella linea.

Rif.Compile (r ”\ d 4-\ d 2-\ d 2”)

Comando sopra trova una stringa che ha "4 cifre" seguita da "-" poi "2 cifre" seguite da "-" e "2 cifre". Questo ci darà la data di nascita della persona in modo da estrarre Birth_Day e Birth_Month da questa espressione.

Allo stesso modo troveremo l'indirizzo e -mail utilizzando espressioni regolari. Dopo questo, confronteremo Birthday_Month e Current_Month e Birthday_Day e Current_Day. Se queste condizioni sono soddisfatte, invieremo l'e -mail di compleanno utilizzando la funzione "Send_mail" a Exact '08: 00 '.

Esecuzione automatico dello script tramite Cronjob

Ora ci assicureremo che questo script Python funzioni ogni volta. Per fare questo, aggiungeremo questo compito a Crrontab. Crrontab, in Linux, viene utilizzato per eseguire automaticamente le attività. Quello che dobbiamo fare è solo aggiungere il compito a crontab. Per fare ciò, segui i passaggi indicati.

  1. Apri Crontab per aggiungere l'attività nel terminale utilizzando il comando seguente
ubuntu@ubuntu: ~ $ crontab -e
  1. Alla fine di questo file Immettere il comando seguente senza #
@reboot python path_to_the_script

I comandi sopra consentiranno al tuo sistema di eseguire lo script Python ogni volta che riavvia il tuo sistema. In questo modo, il tuo sistema eseguirà lo script Python ogni volta che il tuo sistema è acceso.