Python

E-mails verzenden met Python

E-mails verzenden met Python
Het verzenden, controleren en beantwoorden van e-mails is een tijdrovende taak, vooral wanneer u het voor een groot aantal mensen of klanten doet waarbij u alleen de naam, het adres, de leeftijd en andere kleine dingen van de ontvanger hoeft te wijzigen. Het zou een zeer moeilijke taak voor u zijn om een ​​programma te schrijven dat alle soorten persoonlijke/zakelijke e-mails aankan, maar toch kunt u in dit opzicht veel dingen automatiseren, wat u uiteindelijk veel tijd zal besparen.

U wilt uw klanten bijvoorbeeld een herinnering sturen voor hun resterende rekeningen en u hebt alle klantgerelateerde gegevens zoals hun telefoonnummers, adres, leeftijd enz. in een Excel-blad of een database. In plaats van dit handmatig te doen, kunt u een eenvoudig programma in Python om dat automatisch voor je te doen. In deze zelfstudie leren we hoe het e-mailprotocol werkt en hoe u het proces kunt automatiseren om uw kostbare tijd te besparen.

Een woord over SMTP

Simple Mail Transfer Protocol (SMTP) is een geautomatiseerd equivalent van uw postdienst. Het is een protocol dat werkt op de applicatielaag van een TCP/IP-netwerk. Het is een standaardprotocol voor het verzenden en ontvangen van e-mails via internet. Het e-mailoverdrachtproces bestaat uit e-mailservers en clients die e-mails naar elkaar verzenden en ontvangen.

U hebt bijvoorbeeld een GMAIL-account en u wilt een e-mail sturen naar uw vriend op zijn YAHOO-account. U schrijft een e-mail en drukt op verzenden, maar het backend-proces is een beetje ingewikkeld en om dit proces te begrijpen, moet u eerst SMTP begrijpen. Uw SMTP-e-mailclient verzendt eerst HALLO (of EHLO) naar de GMAIL-server, kunt u zeggen dat deze opdracht of header het equivalent is van Gastheer header in HTTP-protocol en wordt gebruikt om de server te identificeren met behulp van de domeinnaam. Na HELO of EHLO authenticeert de client zichzelf bij de server met de opgegeven gebruikersnaam en wachtwoord met behulp van AUTH opdracht. Vervolgens specificeert het het e-mailadres van de afzender en ontvanger en vervolgens de berichttekst en verzendt het e-mail naar de GMAIL-server. GMAIL-server zal eerst bevestigen dat of het e-mailadres van de ontvanger op YAHOO bestaat of niet, dan zal het de e-mail naar YAHOO Server sturen waar de ontvanger zijn e-mails van kan ophalen.

SMTPLIB

SMTPLIB is een python-bibliotheek die kan worden gebruikt als een SMTP-client, net als uw GMAIL, YAHOO, Thunderbird of een andere e-mailclient en kan worden gebruikt om e-mails te verzenden. We kunnen alle taken uitvoeren met de SMTPLIB-client die we kunnen doen met degenen met een grafische gebruikersinterface.

Het wordt standaard geleverd in Python, voor het geval je het niet hebt, kun je het installeren met de volgende opdracht:.

[e-mail beveiligd]:~$ pip install smtplib

OF in Python3

[e-mail beveiligd]:~$ pip install smtplib

Je eerste e-mail schrijven met Python

In deze tutorial gebruik ik een GMAIL-account als afzender, ook zal ik gebruik maken van de Python-console, dus het zal voor mij gemakkelijker zijn om elke regel code stap voor stap uit te leggen. Om te beginnen, moeten we onze GMAIL toegang geven tot minder veilige apps.

Dus log in op uw GMAIL-account en ga vervolgens naar accountinstellingen.

Zorg er nu voor dat toegang voor minder veilige apps is ingeschakeld.

Open nu uw python-console en begin met het schrijven van uw eerste e-mail met Python

[e-mail beveiligd]:~$ python
Python 2.7.16 (standaard, 7 oktober 2019, 17:36:04)
[GCC 8.3.0] op linux2

Typ "help", "copyright", "credits" of "licentie" voor meer informatie.

// importeer de SMTP-bibliotheek
>>> smtplib importeren
// maak verbinding met de GMAIL-server met domeinnaam en poortnummer (deze instelling verschilt voor)
elke e-mailprovider, bekijk de onderstaande tabel)
>>> mailobj = smtplib.SMTP('smtp.gmail.com', 587)
// zeg hallo tegen de server
>>> mailobj.ehlo()
(250, 'smtp'.gmail.com tot uw dienst, [103.255.4.246]\nSIZE35882577\n8BITMIME\nSTARTTLS\
nVERBETERDE STATUSCODES\nPIPELINING\nCHUNKING\nSMTPUTF8')
//Poort 587 betekent dat we een versleutelde TLS-verbinding gebruiken, dus start versleutelde TLS
communicatie met behulp van starttls(), zodat onze inloggegevens en berichten niet worden gesnoven
>>> mailobj.schrikt()
(220, '2.0.0 Klaar om TLS te starten')
// log in op uw GMAIL-account met e-mail en wachtwoord
>>> mailobj.login('[email protected]','s3cr3t_p4ssw0rd')
(235, '2.7.0 geaccepteerd')
// specificeer het e-mailadres en de e-mailinhoud van de afzender en ontvanger
>>> mailobj.sendmail('[email protected]','[email protected]','Onderwerp:
Hallo Wereld! \n Hallo wereld! dit is mijn eerste hallo wereld e-mail in Python')

// Sluit de verbinding met de GMAIL-server
>>> mailobj.stoppen()
(221, '2.0.0 sluitverbinding b6sm4519863lfi.72 - gsmtp')

Vervang in het bovenstaande voorbeeldprogramma de gegeven inhoud door uw eigen inhoud. Als u geen GMAIL-gebruiker bent, kunt u de e-mailserver van uw provider gebruiken. Hier is de lijst met domeinnamen en poorten van enkele veelvoorkomende e-mailproviders.

Naam Server domeinnaam Haven
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-mail.vooruitzichten.com 587
Yahoo Mail smtp.mail.yahoo.com 587
Verizon smtp.verizon.netto- 465
Comcast smtp.comcast.netto- 587

Enkele woorden over IMAP

Dus we hebben net bestudeerd dat SMTP wordt gebruikt om e-mails te verzenden, maar waar is IMAP (Internet Access Messaging Protocol) voor?? SMTP kan niet worden gebruikt om e-mails van de server te zoeken en te ontvangen, daarvoor wordt het IMAP- of POP3-protocol gebruikt.

IMAPCLIENT, IMAPLIB en PYZMAIL

Er zijn twee belangrijke bibliotheken in Python die kunnen worden gebruikt als IMAP-client om e-mails van de mailserver te vinden, op te halen en te verwijderen. Python heeft standaard imaplib bibliotheek maar een andere externe bibliotheek imapclient is effectiever en gebruiksvriendelijker. In deze tutorial gebruiken we imapclient om e-mails op te halen van de mailserver.

Het probleem met imapclient is dat het e-mails van de mailserver in onbewerkte indeling ophaalt. Dus we hebben nodig pyzmail bibliotheek als een parser voor gebruiksvriendelijke uitvoer. Om beide bibliotheken te installeren, typt u

[email protected]:~$ sudo pip install imapclient
[e-mail beveiligd]:~$ sudo pip install pyzmail

Uw e-mails ophalen van Mail Server

Nu leren we hoe we e-mail van de mailserver kunnen zoeken en downloaden met imapclient. We gebruiken imapclient om e-mails van de server te zoeken en te downloaden, daarna gebruiken we pyzmail om deze onbewerkte inhoud te ontleden. Laten we

// importeer imapclient bibliotheek
>>> imapclient importeren
// Maak verbinding met de IMAP-server van GMAIL
>>> obj = imapclient.IMAPClient('imap.gmail.com',ssl=True)
// Log in op uw e-mailaccount met uw inloggegevens
>>> obj.login('[email protected]','s3cr4tp4ss')
'[e-mail beveiligd] geverifieerd (geslaagd)'
// Selecteer berichtenmap om te lezen i.e INBOX, ONTWERPEN, VERZONDEN e-mails
>>> obj.select_folder('INBOX', readonly=True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'VLAGGEN': ('\\Beantwoord', '\\Gemarkeerd', '\\Concept', '\\Verwijderd', '\\Gezien',
'$NotPhishing', '$Phishing'), 'UIDVALIDITY': 1, 'ALLEEN-LEZEN': ["], 'RECENT': 0
// Zoek je berichten in je INBOX, of pas een filter toe, het onderstaande filter wordt weergegeven
u de e-mails ontvangen na 25-okt-2019
>>> mail_ids = obj.zoeken(['SINDS', '25-okt-2019'])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// De lijst "mail_ids" bevat een lijst met e-mail-ID's die zijn ontvangen sinds 25-okt-2019,
u kunt een e-mail downloaden met de imapclient-ophaalfunctie.
>>> raw_mail = obj.fetch([919],['LICHAAM[]','VLAGGEN'])
// Nu is de inhoud in de variabele raw_mail in onbewerkte indeling, het kan niet worden weergegeven op de
scherm direct, dus we hebben een parser nodig om deze inhoud te ontleden voor een gebruiksvriendelijke uitvoer
>>> importeer pyzmail
>>> bericht = pyzmail.PyzMessage.fabriek(raw_mail[919]['BODY[]'])
// Nu wordt e-mail geparseerd en opgeslagen in de berichtvariabele, om het onderwerp te krijgen van
de e-mail, gebruik de functie get_subject
>>> bericht.get_subject()
u'Verkleed je vaardigheden deze Halloween met 25% korting'
// Op dezelfde manier kunt u de details van de afzender zien
>>> bericht.get_addresses('van')
[(u'Usama Azad', '[email protected]')]
>>> bericht.get_addresses('naar')
[(u'[email protected]', '[email protected]')]
// Om de hoofdtekst van de e-mail te krijgen, typt u
>>> bericht.text_part.get_payload().decoderen (bericht).text_part.tekenset)
jij" Hallo! Geniet van 25% korting op onze premium cursussen”

Als je een account hebt bij een andere e-mailserviceprovider dan GMAIL, kun je inloggen op hun IMAP-server. Hier is de lijst met IMAP-domeinnamen van enkele bekende e-mailproviders.

Aanbieder Domeinnaam voor IMAP-server
YAHOO imap.mail.yahoo.com
Hotmail/Outlook imap-mail.vooruitzichten.com
Verizon inkomend.verizon.netto-
Comcast imap.comcast.netto-
AT&T imap.mail.att.netto-

Uw e-mail verwijderen van IMAP-server

Net als bij het zoeken en ophalen van e-mails van de server, kunt u ook e-mails van uw e-mailserver verwijderen met behulp van hun uid. Volg gewoon de gegeven stappen

// Om een ​​e-mail te verwijderen, moet je alleen-lezen op 'False' zetten om schrijftoegang te krijgen tot je
e-mails
>>> obj.select_folder('INBOX', readonly=False)
>>> mail_ids = obj.zoeken(['SINDS', '25-okt-2019'])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Geef een e-mail-uid of een lijst met e-mail-uids op, na het uitvoeren van onderstaande opdracht,
je e-mail verdwijnt uit INBOX.
>>> obj.delete_messages(919)
919: ('\\Gezien', '\\Verwijderd')
 
// Met deze opdracht worden uw e-mails permanent van de e-mailserver verwijderd
>>> obj.uitwissen()
('Succes', [])

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

Je eigen verjaardagsherinnering verzinnen

Je hebt de komende maanden verjaardagen van je vrienden en je wilt ze op hun verjaardagen wensen. Maar je hebt veel werk op je kantoor en de kans bestaat dat je vergeet ze te wensen. Deze taak kan dus automatisch worden uitgevoerd met python. Hieronder volgt de code om deze taak uit te voeren:.

// Modules importeren
opnieuw importeren
// os-module wordt gebruikt om besturingssysteemtaken uit te voeren i.e toegang tot mappen
importeer os
datum/tijd importeren
smtplib importeren
 
// een functie definiëren die e-mails zal verzenden
def send_mail (ontvanger_mail_address, naam):
sender_mail_address = "[e-mail beveiligd]"
passwd = "afzenderPasswd"
// verbinding maken met Gmail-server met domeinnaam en poortnummer
obj = smtplib.SMTP('smtp.gmail.com', 587)
obj.ehlo()
obj.schrikt()
// inloggen op uw gmail-account
obj.login(afzender_mail_address, passwd)
// mail versturen naar 'reciever_mail_address'.
obj.sendmail(sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail\n\n HappyBirthday "+naam)
// verbinding beëindigen
obj.stoppen()
// Hoofdonderdeel
// naar de map gaan waarin het bestand met gegevens aanwezig is
os.chdir("path_to_birthday_data_file")
terwijl 1:
// datum en tijd van het huidige moment ophalen
vandaag = datumtijd.datum Tijd.vandaag()
vandaag = str(vandaag)
// het huidige jaar, maand, dag, uur, minuut en seconde krijgen minute
huidig_jaar = vandaag[0:4]
huidige_maand = vandaag[5:7]
huidige_dag = vandaag[8:10]
huidig_uur = vandaag[11:13]
huidige_minuut = vandaag[14:16]
huidige_sec = vandaag[17:19]
// verjaardagsbestand openen in object 'birthday_file' in leesmodus
verjaardagsbestand = open('verjaardagsbestand','r')
// alle regels van 'verjaardag_bestand' opslaan in de lijst met regels
lijnen = verjaardag_bestand.leesregels()
// het object 'verjaardag_bestand' sluiten
verjaardag_bestand.dichtbij()
// elke regel lezen met for-lus
voor lijn in lijnen:
// een reguliere expressie maken om een ​​datum te vinden in 'verjaardagsbestand'
dateEx = re.compile(r"\d4-\d2-\d2")
findDate=dateEx.zoek(regel)
datum = vinddatum.groep()
// krijg birthday_month en birthday_day uit bestand
verjaardag_maand = datum[5:7]
verjaardag_dag = datum[8:10]
// een reguliere expressie maken om het e-mailadres van birthday_file te vinden
mailEx = opnieuw.compile(r"\w*@\w*.com")
findMail = mailEx.zoek(regel)
receiver_mail = findMail.groep()
// een reguliere expressie maken om de naam van de persoon te vinden
naamEx = re.compileren(r"\w*")
vindNaam = naamEx.zoek(regel)
naam = vindNaam.groep()
// controleren of iemand jarig is of niet
if huidige_maand == verjaardag_maand en =huidige_dag == verjaardag_dag:
// mail versturen om exact 08:00 exact
if current_hour == '08' en current_minute == '00' en current_sec == '00':
// aanroepen van de functie 'send_mail'
send_mail(ontvanger_mail, naam)

Nu maken we een 'verjaardag_bestand', waarin we namen, e-mailadressen en hun geboortedatum opslaan. Dit is een eenvoudig tekstbestand en ziet er zo uit.

Uitleg

We zullen dit bestand lezen met behulp van python-script en controleren wiens verjaardag eraan komt en wensen hen. Allereerst zullen we enkele modules importeren. DATETIME-module heeft functies die ons de huidige datum en tijd geven en nog veel meer. Maar we zullen dit alleen gebruiken om de huidige datum en tijd te vinden. SMTPLIB-module wordt gebruikt om e-mail te verzenden en is hierboven uitgelegd. RE-module heeft functies die worden gebruikt om reguliere expressies uit een string te vinden.

In dit script definiëren we de functie 'send_mail', die e-mail verzendt naar het 'reciever_mail_address', wiens naam 'name' is. Beide argumenten worden doorgegeven aan de functie van het hoofdgedeelte van msg. In het hoofdgedeelte van het script zullen we zien hoe we 'reciever_mail_address' en 'name' vinden.

Het verzenden van e-mail met smtplib is hierboven uitgelegd, dus u kunt het lezen en het wordt hier niet besproken.

In het hoofdgedeelte gaan we met 'os . naar de map waar we 'verjaardagsbestand' hebben opgeslagen.chdir()'. Dan hebben we een 'while-lus' die altijd waar is, dus het zal de verjaardag continu controleren. Nu krijgen we de huidige datum en tijd en slaan deze op in de variabele 'vandaag'. Het ziet er zo uit.

2019-11-01 16:19:07.144925

We extraheren jaar, maand, dag, uur, minuten en seconden met behulp van indices van deze hoeveelheden. Hierna zullen we birthday_file openen in een object 'birthday_file' in leesmodus, zodat we het alleen kunnen lezen. Nu zullen we alle regels van dit bestand opslaan in de regelslijst lines. 'verjaardag_bestand'.readlines()' slaat elke regel op in de lijst 'lines'. Hierna sluiten we birthday_file met 'birthday_file.close()' functie.

Nu zullen we elke regel één voor één lezen met de for-lus. In elke regel zijn de gegevens van slechts één persoon beschikbaar in 'verjaardagsbestand', dus we lezen slechts de gegevens van één persoon tegelijk in deze lus.

Hierna extraheren we de geboortedatum, het e-mailadres en de naam van de persoon die de RE-module gebruikt. Omdat we de datum in het volgende formaat hebben geschreven:

JJJJ-MM-DD

We zullen dus een reguliere expressie 'dateEx' maken die dit formaat in de regel vindt.

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

Bovenstaande opdracht zoek een string met '4 cijfers' gevolgd door '-' dan '2 cijfers' gevolgd door '-' en '2 cijfers'. Dit geeft ons de geboortedatum van de persoon, dus we halen geboortedag en geboortemaand uit deze uitdrukking this.

Op dezelfde manier zullen we e-mailadressen vinden met behulp van reguliere expressies. Hierna vergelijken we de verjaardag_maand en huidige_maand en verjaardag_dag en huidige_dag. Als aan deze voorwaarden is voldaan, sturen we de verjaardagsmail met de functie 'send_mail' om exact '08:00'.

Script automatisch uitvoeren via Cronjob

Nu zullen we ervoor zorgen dat dit python-script elke keer wordt uitgevoerd. Om dit te doen, zullen we deze taak toevoegen aan crontab. Crontab, in linux, wordt gebruikt om taken automatisch uit te voeren. Wat we moeten doen is gewoon de taak toevoegen aan crontab. Volg hiervoor de gegeven stappen.

  1. Open crontab om een ​​taak in uw terminal toe te voegen met behulp van de volgende opdracht:
[e-mail beveiligd]:~$ crontab -e
  1. Voer aan het einde van dit bestand de volgende opdracht in zonder #
@reboot python path_to_the_script

Met bovenstaande opdrachten kan uw systeem het python-script uitvoeren telkens wanneer u uw systeem opnieuw opstart. Op deze manier zal uw systeem elke keer dat uw systeem is ingeschakeld een python-script uitvoeren.

Beste opdrachtregelspellen voor Linux
De opdrachtregel is niet alleen je grootste bondgenoot bij het gebruik van Linux, hij kan ook de bron van entertainment zijn omdat je hem kunt gebruik...
Beste gamepad-toewijzingsapps voor Linux
Als je graag games op Linux speelt met een gamepad in plaats van een typisch toetsenbord- en muisinvoersysteem, zijn er enkele handige apps voor jou. ...
Handige hulpmiddelen voor Linux-gamers
Als je graag games op Linux speelt, is de kans groot dat je apps en hulpprogramma's zoals Wine, Lutris en OBS Studio hebt gebruikt om de game-ervaring...