Pitone

Invio di email con Python

Invio di email 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 del destinatario, l'indirizzo, l'età e altre piccole cose. Sarebbe un compito molto difficile per te scrivere un programma in grado di gestire tutti i tipi di e-mail personali/di lavoro, ma puoi comunque automatizzare molte cose a questo proposito, il che alla fine ti farà risparmiare un sacco di tempo.

Ad esempio, vuoi 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. in un foglio Excel o un database, quindi invece di farlo manualmente, puoi scrivere un semplice programma in Python per farlo automaticamente per te. In questo tutorial impareremo come funziona il protocollo di posta elettronica e come automatizzare il processo per risparmiare tempo prezioso.

Una parola sull'SMTP

Il Simple Mail Transfer Protocol (SMTP) è l'equivalente informatizzato del tuo servizio postale. È un protocollo che funziona a livello di applicazione di una rete TCP/IP. È un protocollo standard per l'invio e la ricezione di e-mail su Internet. Il processo di trasferimento della posta consiste in server e client di posta elettronica che inviano e ricevono messaggi di posta elettronica l'uno dall'altro.

Ad esempio, hai un account GMAIL e vuoi inviare un'e-mail al tuo amico sul suo account YAHOO. Scrivi un'email 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 SMTP invia per primo 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 al server con il nome utente e la password forniti utilizzando AUTORIZZAZIONE comando. Quindi specifica l'indirizzo e-mail del mittente e del destinatario e quindi il corpo del messaggio e invia l'e-mail al server GMAIL. Il server GMAIL prima confermerà che l'indirizzo e-mail del destinatario su YAHOO esiste o meno, quindi invierà l'e-mail al server YAHOO da cui il destinatario può recuperare le sue e-mail.

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 utilizzata 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 fornito di default in Python, nel caso in cui non lo possiedi, puoi installarlo usando il seguente comando.

[email protected]:~$ pip install smtplib

OPPURE in Python3

[email protected]:~$ pip installa smtplib

Scrivi la tua prima email con Python

In questo tutorial, utilizzerò un account GMAIL come mittente, inoltre utilizzerò la console Python, quindi sarà più facile per me spiegare ogni riga di codice passo dopo passo. Per iniziare, dobbiamo consentire al nostro GMAIL l'accesso ad app meno sicure.

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

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

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

[email protected]:~$ python
Python 2.7.16 (predefinito, 7 ottobre 2019, 17:36:04)
[CGC 8.3.0] su linux2

Digita "aiuto", "copyright", "crediti" o "licenza" per ulteriori informazioni.

//importa la libreria SMTP
>>> import smtplib
//connettiti al server GMAIL con nome di dominio e numero di porta (questa impostazione è diversa per
ciascun provider di posta elettronica, si prega di dare un'occhiata alla tabella riportata di seguito)
>>> mailobj = smtplib.SMTP('smtp.gmail.com',587)
// saluta il server
>>> mailobj.ehi()
(250, 'smtp.gmail.com al tuo servizio, [103.255.4.246]\nSIZE35882577\n8BITMIME\nSTARTTLS\
nENHANCEDSTATUSCODES\nPIPELINING\nCHUNKING\nSMTPUTF8')
//La porta 587 significa che stiamo utilizzando una connessione TLS crittografata, quindi avvia TLS crittografato
comunicazione utilizzando starttls(), in modo che le nostre credenziali e i nostri messaggi non vengano sniffati
>>> mailobj.inizio()
(220, '2.0.0 Pronto per iniziare TLS')
//accedi al tuo account GMAIL usando email e password
>>> mailobj.login('[email protected]','s3cr3t_p4ssw0rd')
(235, '2.7.0 Accettato')
//specificare l'indirizzo e-mail del mittente e del destinatario e il contenuto dell'e-mail
>>> mailobj.sendmail('[email protected]','[email protected]','Oggetto:
Ciao mondo! \n Ciao mondo! questa è la mia prima email Hello World in Python')

// chiude la connessione al server GMAIL
>>> mailobj.smettere()
(221, '2.0.0 chiusura connessione b6sm4519863lfi.72 - gsmtp')

Nel programma di esempio sopra, sostituisci il contenuto fornito con il tuo. 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 provider di posta.

Nome Nome di dominio del server Porta
Gmail smtp.gmail.come 587
Outlook/Hotmail smtp-mail.prospettiva.come 587
Yahoo Mail smtp.posta.yahoo.come 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 a cosa serve IMAP (Internet Access Messaging Protocol)?? Non è possibile utilizzare SMTP per cercare e ricevere e-mail dal server, a tale scopo viene utilizzato il protocollo IMAP o POP3.

IMAPCLIENT, IMAPLIB e PYZMAIL

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

Il problema con imapclient è che recupera le email dal server di posta in formato raw. Quindi, avremo bisogno pyzmail libreria come parser per un output facile da usare. Per installare entrambe le librerie, digita

[email protected]:~$ sudo pip install imapclient
[email protected]:~$ sudo pip install pyzmail

Ottenere le tue email dal server di posta

Ora impareremo come cercare e scaricare la posta dal server di posta utilizzando imapclient. Useremo imapclient per cercare e scaricare le email dal server, poi useremo pyzmail per analizzare questo contenuto non elaborato. andiamo

// importa la libreria imapclient
>>> importa imapclient
// Connettiti al server IMAP di GMAIL
>>> obj = imapclient.IMAPClient('imap.gmail.com',ssl=Vero)
// Accedi al tuo account di posta elettronica utilizzando le tue credenziali
>>> obj.login('[email protected]','s3cr4tp4ss')
'[email protected] autenticata (successo)'
// Seleziona la cartella dei messaggi da leggere i.e POSTA IN ARRIVO, BOZZA, E-mail INVIATE
>>> obj.select_folder('INBOX', readonly=True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGS': ('\\Answered', '\\Flagged', '\\Draft', '\\Deleted', '\\Visto',
'$NotPhishing', '$Phishing'), 'UIDVALIDITY': 1, 'SOLA LETTURA': ["], 'RECENT': 0
// Cerca i tuoi messaggi nella Posta in arrivo o applica un filtro, verrà visualizzato il filtro sottostante
le mail ricevute dopo il 25-ott-2019
>>> mail_ids = obj.search(['SINCE', '25-Oct-2019'])
>>> mail_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// L'elenco "mail_ids" contiene un elenco di ID email ricevuti dal 25-ott-2019,
puoi scaricare un'e-mail usando la funzione fetch di imapclient.
>>> raw_mail = oggetto.fetch([919],['BODY[]','FLAGS'])
// Ora, il contenuto nella variabile raw_mail è in formato raw, non può essere visualizzato sul
schermo direttamente, quindi avremmo bisogno di un parser per analizzare questo contenuto per un output facile da usare
>>> importa pyzmail
>>> messaggio = pyzmail.PyzMessage.fabbrica(raw_mail[919]['BODY[]'])
// Ora l'email viene analizzata e memorizzata nella variabile message, per ottenere l'oggetto di
l'e-mail, usa la funzione get_subject
>>> messaggio.get_subject()
u'Vesti le tue abilità questo Halloween con il 25% di sconto'
// Allo stesso modo, puoi vedere i dettagli del mittente
>>> messaggio.get_addresses('da')
[(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.set di caratteri)
u”Ciao! Goditi un piatto del 25% sui nostri corsi premium”

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

Fornitore Nome di dominio per server IMAP
YAHOO imap.posta.yahoo.come
Hotmail/Outlook imap-mail.prospettiva.come
Verizon in arrivo.verizon.netto
Comcast imap.comcast.netto
AT&T imap.posta.att.netto

Eliminare la tua email dal server IMAP

Simile alla ricerca e al recupero di e-mail dal server, puoi anche eliminare le e-mail dal tuo server di posta utilizzando il loro uid. Basta seguire i passaggi indicati

// Per eliminare un'e-mail, devi impostare la sola lettura su 'False' per ottenere l'accesso in scrittura al tuo
email
>>> obj.select_folder('INBOX', readonly=False)
>>> mail_ids = obj.search(['SINCE', '25-Oct-2019'])
>>> mail_id
[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 seguente,
la tua email scomparirà da INBOX.
>>> obj.delete_messages(919)
919: ('\\Visto', '\\Eliminato')
 
// Questo comando eliminerà definitivamente le tue email dal server di posta
>>> obj.cancellare()
("Successo", [])

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

Crea il tuo promemoria di compleanno birthday

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

// importazione di moduli
importare re
// il modulo os viene utilizzato per eseguire le attività del sistema operativo i.e accesso alle directory
importare il sistema operativo
data e ora di importazione
import smtplib
 
// definendo una funzione che invierà email
def send_mail(reciever_mail_address, nome):
sender_mail_address = "[email protetta]"
passwd = "senderPasswd"
//connessione al server gmail con nome di dominio e numero di porta
obj = smtplib.SMTP('smtp.gmail.com', 587)
obj.ehi()
obj.inizio()
// accedi al tuo account gmail
obj.login(sender_mail_address, passwd)
// invio di posta a 'reciever_mail_address'.
obj.sendmail(sender_mail_address, recever_mail_address, "Oggetto: BirthDay Wishing Mail\n\n HappyBirthday "+nome)
// termina la connessione
obj.smettere()
// Corpo principale
// andando alla directory in cui è presente il file contenente i dati
os.chdir("percorso_del_file_dati_del_compleanno")
mentre 1:
// ottenere la data e l'ora del momento presente
oggi = data e ora.appuntamento.oggi()
oggi = str(oggi)
// ottenere anno, mese, giorno, ora, minuti e secondi correnti
anno_corrente = oggi[0:4]
mese_corrente = oggi[5:7]
giorno_corrente = oggi[8:10]
ora_corrente = oggi[11:13]
minuto_corrente = oggi[14:16]
sec_corrente = oggi[17:19]
// apertura del file di compleanno nell'oggetto 'birthday_file' in modalità di lettura
compleanno_file = open('compleanno_file','r')
// salvando tutte le righe di 'birthday_file' nell'elenco delle righe
righe = file_compleanno.righe di lettura()
// chiusura dell'oggetto 'file_compleanno'
compleanno_file.vicino()
// legge ogni riga usando il ciclo for
per righe in righe:
// creare un'espressione regolare per trovare una data in 'file_compleanno'
dateEx = re.compile(r"\d4-\d2-\d2")
trovaData=dataEx.ricerca (riga)
data = trovaData.gruppo()
// ottenere il mese_compleanno e il giorno_compleanno dal file
compleanno_mese = data[5:7]
compleanno_giorno = data[8:10]
// creare un'espressione regolare per trovare l'indirizzo di posta da birthday_file
mailEx = re.compile(r"\w*@\w*.com")
findMail = mailEx.ricerca (riga)
ricevitore_mail = trova la posta.gruppo()
//creare un'espressione regolare per trovare il nome della persona
nomeEx = re.compila(r"\w*")
trovaNome = nomeEx.ricerca (riga)
nome = trovaNome.gruppo()
// controlla se il compleanno di qualcuno sta arrivando o no
if mese_corrente == mese_compleanno e = giorno_corrente == giorno_compleanno:
// invio posta alle 08:00 esatte
if current_hour == '08' e current_minute == '00' e current_sec == '00':
// chiama la funzione 'send_mail'
send_mail(reciever_mail, nome)

Ora creiamo un 'file_compleanno', in cui salviamo nomi, indirizzi e-mail e la loro data di nascita. Questo è un semplice file di testo e ha questo aspetto.

Spiegazione

Leggeremo questo file usando lo script python e controlleremo di chi sta arrivando il compleanno e gli augureremo. Prima di tutto importeremo dei Moduli. Il modulo DATETIME ha funzioni che ci danno la data e l'ora correnti e molto altro. Ma lo useremo solo per trovare la data e l'ora correnti. Il modulo SMTPLIB viene utilizzato per inviare posta ed è stato spiegato sopra. Il modulo RE 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 al 'reciever_mail_address', il cui nome è 'name'. Entrambi gli argomenti vengono passati alla funzione dal corpo principale di msg. Nel corpo principale dello script vedremo come troviamo 'reciever_mail_address' e 'name'.

L'invio di e-mail utilizzando smtplib è stato spiegato sopra, quindi puoi leggerlo e non verrà discusso qui.

Nel corpo principale, andiamo alla directory in cui abbiamo salvato 'file_compleanno' usando 'os.chdir()'. Quindi abbiamo un "ciclo while" che è sempre vero, quindi controllerà continuamente il compleanno. Ora otteniamo la data e l'ora correnti e le salviamo nella variabile "oggi". Sembra così.

2019-11-01 16:19:07.144925

Estrarremo anno, mese, giorno, ora, minuti e secondi utilizzando gli indici di queste quantità. Dopodiché, apriremo birthday_file in un oggetto 'birthday_file' in modalità di lettura, quindi possiamo solo leggerlo. Ora salveremo tutte le righe di questo file nell'elenco delle righe. 'file_compleanno.readlines()' salverà ogni riga nell'elenco 'linee'. Dopodiché chiuderemo birthday_file usando 'birthday_file.close()' funzione.

Ora leggeremo ogni riga una per una usando il ciclo for. In ogni riga sono disponibili solo i dati di una persona in 'file_compleanno', quindi stiamo leggendo solo i dati di una persona alla volta in questo ciclo.

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

AAAA-MM-GG

Quindi creeremo un'espressione regolare 'dateEx' che trova questo formato nella riga.

ri.compile(r”\d4-\d2-\d2”)

Il comando sopra trova una stringa che ha "4 cifre" seguita da "-", quindi "2 cifre" seguita da "-" e "2 cifre". Questo ci darà la data di nascita della persona, quindi estrarremo birth_day e birth_month da questa espressione.

Allo stesso modo troveremo l'indirizzo email usando le espressioni regolari. Successivamente, confronteremo il mese_compleanno e il mese_corrente e il giorno_compleanno e il giorno_corrente. Se queste condizioni sono soddisfatte, invieremo l'e-mail di compleanno utilizzando la funzione 'send_mail' alle esatte '08:00'.

Esecuzione automatica dello script tramite Cronjob

Ora faremo in modo che questo script Python venga eseguito ogni volta. Per fare ciò, aggiungeremo questa attività a crontab. Crontab, in Linux, viene utilizzato per eseguire attività automaticamente tasks. Quello che dobbiamo fare è semplicemente aggiungere l'attività a crontab. Per farlo, segui i passaggi indicati given.

  1. Apri crontab per aggiungere attività nel tuo terminale usando il seguente comando
[email protected]:~$ crontab -e
  1. Alla fine di questo file inserisci il seguente comando senza #
@reboot python path_to_the_script

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

Emula i clic del mouse passando il mouse utilizzando il mouse senza clic in Windows 10
L'uso di un mouse o di una tastiera nella postura sbagliata di un uso eccessivo può causare molti problemi di salute, tra cui tensione, sindrome del t...
Aggiungi i gesti del mouse a Windows 10 utilizzando questi strumenti gratuiti
Negli ultimi anni computer e sistemi operativi si sono notevolmente evoluti greatly. C'è stato un tempo in cui gli utenti dovevano usare i comandi per...
Controlla e gestisci il movimento del mouse tra più monitor in Windows 10
Gestore mouse con doppio display ti consente di controllare e configurare il movimento del mouse tra più monitor, rallentando i suoi movimenti vicino ...