Python

E-Mails mit Python senden

E-Mails mit Python senden
Das Versenden, Prüfen und Beantworten von E-Mails ist eine zeitaufwändige Aufgabe, insbesondere wenn Sie es für eine große Anzahl von Personen oder Kunden tun, bei denen Sie nur den Namen, die Adresse, das Alter und andere kleine Dinge des Empfängers ändern müssen. Es wäre eine sehr schwierige Aufgabe für Sie, ein Programm zu schreiben, das alle Arten Ihrer persönlichen / geschäftlichen E-Mails verarbeiten könnte, aber Sie können in dieser Hinsicht viele Dinge automatisieren, was Ihnen letztendlich viel Zeit spart.

Sie möchten beispielsweise Ihren Kunden eine Erinnerung für ihre Restrechnungen senden und haben alle kundenbezogenen Daten wie Telefonnummer, Adresse, Alter usw. in einer Excel-Tabelle oder Datenbank einfaches Programm in Python, das das automatisch für Sie erledigt. In diesem Tutorial erfahren wir, wie das E-Mail-Protokoll funktioniert und wie Sie den Prozess automatisieren können, um Ihre kostbare Zeit zu sparen.

Ein Wort zu SMTP

Simple Mail Transfer Protocol (SMTP) ist ein computergestütztes Äquivalent zu Ihrem Postdienst. Es ist ein Protokoll, das auf der Anwendungsschicht eines TCP/IP-Netzwerks arbeitet. Es ist ein Standardprotokoll zum Senden und Empfangen von E-Mails über das Internet. Der E-Mail-Übertragungsprozess besteht aus E-Mail-Servern und -Clients, die sich gegenseitig E-Mails senden und empfangen.

Du hast beispielsweise ein GMAIL-Konto und möchtest deinem Freund über sein YAHOO-Konto eine E-Mail senden. Sie schreiben eine E-Mail und klicken auf Senden, aber der Backend-Prozess ist etwas kompliziert, und um diesen Prozess zu verstehen, müssen Sie zuerst SMTP verstehen understand. Ihr SMTP-E-Mail-Client sendet zuerst HELO (oder EHLO) an den GMAIL-Server, können Sie sagen, dass dieser Befehl oder Header äquivalent zu . ist Gastgeber Header im HTTP-Protokoll und wird verwendet, um den Server anhand des Domänennamens zu identifizieren. Nach HELO oder EHLO authentifiziert sich der Client mit dem angegebenen Benutzernamen und Passwort beim Server mit AUTH Befehl. Dann gibt es die E-Mail-Adresse des Absenders und des Empfängers und dann den Nachrichtentext an und sendet die E-Mail an den GMAIL-Server. Der GMAIL-Server bestätigt zuerst, ob die E-Mail-Adresse des Empfängers auf YAHOO existiert oder nicht, dann sendet er die E-Mail an den YAHOO-Server, wo der Empfänger seine E-Mails abrufen kann.

SMTPLIB

SMTPLIB ist eine Python-Bibliothek, die wie Ihr GMAIL, YAHOO, Thunderbird oder jeder andere E-Mail-Client als SMTP-Client verwendet und zum Senden von E-Mails verwendet werden kann. Wir können alle Aufgaben mit dem SMTPLIB-Client ausführen, die wir mit denen mit grafischer Benutzeroberfläche ausführen können.

Es kommt standardmäßig in Python, falls Sie es nicht haben, können Sie es mit dem folgenden Befehl installieren install.

[email protected]:~$ pip install smtplib

ODER in Python3

[email protected]:~$ pip install smtplib

Schreiben Sie Ihre erste E-Mail mit Python

In diesem Tutorial werde ich ein GMAIL-Konto als Absender verwenden und die Python-Konsole verwenden, damit ich jede Codezeile Schritt für Schritt erklären kann. Um zu beginnen, müssen wir unserem GMAIL-Zugriff auf weniger sichere Apps erlauben.

Melden Sie sich also bei Ihrem GMAIL-Konto an und gehen Sie dann zu den Kontoeinstellungen.

Stellen Sie jetzt sicher, dass der Zugriff für weniger sichere Apps aktiviert ist.

Öffnen Sie nun Ihre Python-Konsole und schreiben Sie Ihre erste E-Mail mit Python

[email protected]:~$ python
Python 2.7.16 (Standard, 7. Oktober 2019, 17:36:04)
[GCC 8.3.0] auf linux2

Geben Sie „Hilfe“, „Copyright“, „Credits“ oder „Lizenz“ ein, um weitere Informationen zu erhalten.

//die SMTP-Bibliothek importieren
>>> smtplib importieren
//mit Domainname und Portnummer mit dem GMAIL-Server verbinden (Diese Einstellung unterscheidet sich für
für jeden E-Mail-Anbieter, werfen Sie bitte einen Blick auf die untenstehende Tabelle)
>>> mailobj = smtplib.SMTP('smtp.Google Mail.com',587)
// sag hallo zum server
>>> mailobj.ehlo()
(250, "smtp".Google Mail.com zu Ihren Diensten, [103.255.4.246]\nSIZE35882577\n8BITMIME\nSTARTTLS\
nERWEITERTE STATUSCODES\nPIPELINING\nCHUNKING\nSMTPUTF8')
//Port 587 bedeutet, dass wir eine verschlüsselte TLS-Verbindung verwenden, also starten Sie verschlüsseltes TLS
Kommunikation mit starttls(), damit unsere Zugangsdaten und Nachrichten nicht ausgespäht werden
>>> mailobj.starttls()
(220, '2 .).0.0 Bereit zum Starten von TLS')
//mit E-Mail und Passwort bei Ihrem GMAIL-Konto anmelden
>>> mailobj.login('[email protected]','s3cr3t_p4ssw0rd')
(235, '2 .).7.0 Akzeptiert')
// E-Mail-Adresse und E-Mail-Inhalt des Absenders und des Empfängers angeben recipient
>>> mailobj.sendmail('[email protected]','[email protected]','Betreff:
Hallo Welt! \n Hallo Welt! Dies ist meine erste Hallo-Welt-E-Mail in Python')

// Verbindung zum GMAIL-Server schließen
>>> mailobj.Verlassen()
(221, '2 .).0.0 Verbindung schließen b6sm4519863lfi.72 - GSM')

Ersetzen Sie im obigen Beispielprogramm den angegebenen Inhalt durch Ihren eigenen. Wenn Sie kein GMAIL-Benutzer sind, können Sie den E-Mail-Server Ihres Providers verwenden. Hier ist die Liste der Domainnamen und Ports einiger gängiger E-Mail-Anbieter.

Name Serverdomänenname Hafen
Google Mail smtp.Google Mail.com 587
Outlook / Hotmail SMTP-Mail.Ausblick.com 587
Yahoo Mail smtp.mail.yahoo.com 587
Verizon smtp.verizon.Netz 465
Komcast smtp.Komcast.Netz 587

Einige Worte zu IMAP

Wir haben gerade untersucht, dass SMTP zum Senden von E-Mails verwendet wird, aber wofür IMAP (Internet Access Messaging Protocol) ist?? SMTP kann nicht zum Suchen und Abrufen von E-Mails vom Server verwendet werden, zu diesem Zweck wird das IMAP- oder POP3-Protokoll verwendet.

IMAPCLIENT, IMAPLIB und PYZMAIL

Es gibt zwei Hauptbibliotheken in Python, die als IMAP-Client verwendet werden können, um E-Mails vom Mailserver zu finden, abzurufen und zu löschen delete. Python hat Vorgabe imaplib Bibliothek, sondern eine andere externe Bibliothek unapclient ist effektiver und einfacher zu bedienen. In diesem Tutorial verwenden wir unapclient um E-Mails vom Mailserver abzurufen.

Das Problem mit unapclient ist, dass es E-Mails vom Mailserver im Rohformat abruft. Also brauchen wir pyzmail Bibliothek als Parser für benutzerfreundliche Ausgabe. Um beide Bibliotheken zu installieren, geben Sie

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

Abrufen Ihrer E-Mails vom Mailserver

Jetzt lernen wir, wie Sie mit imapclient E-Mails vom Mailserver suchen und herunterladen. Wir verwenden imapclient, um E-Mails vom Server zu suchen und herunterzuladen, dann verwenden wir pyzmail, um diesen Rohinhalt zu analysieren. Lasst uns

// Imapclient-Bibliothek importieren
>>> Imapclient importieren
// Verbinden Sie sich mit dem IMAP-Server von GMAIL
>>> obj = imapclient.IMAPClient('imap.Google Mail.com',ssl=Wahr)
// Melden Sie sich mit Ihren Zugangsdaten bei Ihrem E-Mail-Konto an
>>> obj.login('[email protected]','s3cr4tp4ss')
'[email protected] authentifiziert (Erfolg)'
// Nachrichtenordner zum Lesen auswählen i.e EINGANG, ENTWÜRFE, GESENDETE E-Mails
>>> obj.select_folder('INBOX', readonly=True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGS': ('\\Beantwortet', '\\Gekennzeichnet', '\\Entwurf', '\\Gelöscht', '\\Gesehen',
'$NotPhishing', '$Phishing'), 'UIDVALIDITY': 1, 'READ-ONLY': ["], 'RECENT': 0
// Durchsuchen Sie Ihre Nachrichten in Ihrem Posteingang oder wenden Sie einen Filter an. Der Filter unten wird angezeigt
Ihnen die nach dem 25.10.2019 eingegangenen Mails
>>> mail_ids = obj.search(['SEIT', '25-Okt-2019'])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Die Liste „mail_ids“ enthält eine Liste der seit dem 25.10.2019 empfangenen E-Mail-IDs,
Sie können eine E-Mail mit der imapclient-Abruffunktion herunterladen.
>>> raw_mail = obj.fetch([919],['BODY[]','FLAGS'])
// Der Inhalt der Variablen raw_mail liegt jetzt im Rohformat vor, er kann nicht auf dem angezeigt werden
Bildschirm direkt anzeigen, also brauchen wir einen Parser, um diesen Inhalt für eine benutzerfreundliche Ausgabe zu analysieren
>>> pyzmail importieren
>>> Nachricht = pyzmail.PyzMessage.factory(raw_mail[919]['BODY[]'])
// Jetzt wird die E-Mail geparst und in der Nachrichtenvariablen gespeichert, um den Betreff von . zu erhalten
die E-Mail, benutze die Funktion get_subjectsub
>>> Nachricht.get_subject()
u'Verkleide deine Fähigkeiten dieses Halloween mit 25 % Rabatt'
// Ebenso können Sie die Absenderdetails sehen
>>> Nachricht.get_addresses('von')
[(u'Usama Azad', '[email protected]')]
>>> Nachricht.get_addresses('to')
[(u'[email protected]', '[email protected]')]
// Um ​​den Text der E-Mail abzurufen, geben Sie ein
>>> Nachricht.text_teil.get_payload().entschlüsseln (Nachricht.text_teil.Zeichensatz)
u“Hallo! Genießen Sie pauschal 25 % auf unsere Premiumkurse“

Wenn Sie ein Konto bei einem anderen E-Mail-Dienstanbieter als GMAIL haben, können Sie sich bei deren IMAP-Server anmelden. Hier ist die Liste der IMAP-Domainnamen einiger bekannter E-Mail-Anbieter.

Anbieter Domänenname für IMAP-Server
YAHOO imap.mail.yahoo.com
Hotmail/Outlook imap-mail.Ausblick.com
Verizon eingehend.verizon.Netz
Komcast imap.Komcast.Netz
AT&T imap.mail.att.Netz

Löschen Ihrer E-Mail vom IMAP-Server

Ähnlich wie beim Suchen und Abrufen von E-Mails auf dem Server können Sie E-Mails auch mithilfe ihrer UID von Ihrem Mailserver löschen. Folgen Sie einfach den angegebenen Schritten

// Um ​​eine E-Mail zu löschen, müssen Sie schreibgeschützt auf 'False' umstellen, um Schreibzugriff auf Ihre E-Mail zu erhalten
E-Mails
>>> obj.select_folder('INBOX', readonly=False)
>>> mail_ids = obj.search(['SEIT', '25-Okt-2019'])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Geben Sie eine E-Mail-UID oder eine Liste von E-Mail-UIDs an, nachdem Sie den folgenden Befehl ausgeführt haben,
Ihre E-Mail wird aus INBOX verschwinden.
>>> obj.delete_messages(919)
919: ('\\Gesehen', '\\Gelöscht')
 
// Dieser Befehl löscht Ihre E-Mails dauerhaft vom Mailserver
>>> obj.löschen()
('Erfolg', [])

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

Erstellen Sie Ihre eigene Geburtstagserinnerung

Du hast in den kommenden Monaten Geburtstage deiner Freunde und möchtest ihnen Geburtstage wünschen. Aber Sie haben viel Arbeit in Ihrem Büro und es besteht die Möglichkeit, dass Sie vergessen, sie zu wünschen. So kann diese Aufgabe automatisch mit Python ausgeführt werden. Im Folgenden finden Sie den Code zum Ausführen dieser Aufgabe.

// Module importieren
Importieren
// Das os-Modul wird verwendet, um Betriebssystemaufgaben auszuführen i.e Zugriff auf Verzeichnisse
Importieren von OS
Datum/Uhrzeit importieren
smtplib importieren
 
// Definieren einer Funktion zum Senden von E-Mails
def send_mail(reciever_mail_address, name):
sender_mail_address = "[email protected]"
passwd = "senderPasswd"
// Verbindung zum Google Mail-Server mit Domainname und Portnummer herstellen
obj = smtplib.SMTP('smtp.Google Mail.com', 587)
obj.ehlo()
obj.starttls()
// Einloggen in Ihr Google Mail-Konto
obj.login(sender_mail_address, passwd)
// Mail an 'reciever_mail_address' senden.
obj.sendmail(sender_mail_address, reciever_mail_address, "Betreff: Geburtstags-Wunschmail\n\n HappyBirthday "+name)
// Verbindung beenden
obj.Verlassen()
// Hauptkörper
// in das Verzeichnis gehen, in dem eine Datei mit Daten vorhanden ist
os.chdir("path_to_birthday_data_file")
während 1:
// Datum und Uhrzeit des gegenwärtigen Moments abrufen
heute = Datum/Uhrzeit.Terminzeit.heute()
heute = str(heute)
// Aktuelles Jahr, Monat, Tag, Stunde, Minute und Sekunde abrufen
aktuelles_jahr = heute[0:4]
aktueller_monat = heute[5:7]
aktueller_tag = heute[8:10]
aktuelle_Stunde = heute[11:13]
aktuelle_minute = heute[14:16]
current_sec = heute[17:19]
// Geburtstagsdatei im 'birthday_file'-Objekt im Lesemodus öffnen
birthday_file = open('birthday_file','r')
// alle Zeilen von 'birthday_file' in der Zeilenliste speichern
Zeilen = Geburtstagsdatei.Lesezeilen()
// 'birthday_file' Objekt schließen
Geburtstagsdatei.schließen()
// jede Zeile mit der for-Schleife lesen
für Zeile in Zeile:
// Einen regulären Ausdruck erstellen, um ein Datum in 'birthday_file' zu finden
DatumEx = re.compilieren(r"\d4-\d2-\d2")
findDate=dateEx.Suche(Zeile)
date = findDate.Gruppe()
// Geburtstag_Monat und Geburtstag_Tag aus Datei holen
Geburtstag_Monat = Datum[5:7]
Geburtstag_Tag = Datum[8:10]
// Einen regulären Ausdruck erstellen, um die E-Mail-Adresse aus der Geburtstagsdatei zu finden
mailEx = re.compilieren(r"\w*@\w*.com")
findMail = mailEx.Suche(Zeile)
reciever_mail = findMail.Gruppe()
//Einen regulären Ausdruck erstellen, um den Namen der Person zu finden
nameEx = re.compilieren(r"\w*")
findName = nameEx.Suche(Zeile)
name = findName.Gruppe()
// prüfen ob jemand Geburtstag hat oder nicht
if current_month == birthday_month und =current_day == birthday_day:
// Mail um genau 08:00 senden
if current_hour == '08' und current_minute == '00' und current_sec == '00':
// Aufruf der Funktion 'send_mail'
send_mail(Empfänger_Mail, Name)

Jetzt erstellen wir eine 'birthday_file', in der wir Namen, E-Mail-Adressen und deren Geburtsdatum speichern. Dies ist eine einfache Textdatei und sieht so aus.

Erläuterung

Wir werden diese Datei mit Python-Skript lesen und prüfen, wessen Geburtstag kommt und ihnen wünschen. Zuerst werden wir einige Module importieren. Das DATETIME-Modul verfügt über Funktionen, die uns das aktuelle Datum und die aktuelle Uhrzeit und vieles mehr anzeigen. Aber wir werden dies nur verwenden, um das aktuelle Datum und die aktuelle Uhrzeit zu finden. Das SMTPLIB-Modul wird zum Senden von E-Mails verwendet und wurde oben erläutert. Das RE-Modul verfügt über Funktionen, die verwendet werden, um reguläre Ausdrücke aus einer Zeichenfolge zu finden.

In diesem Skript definieren wir die Funktion 'send_mail', die Mail an die 'reciever_mail_address' sendet, deren Name 'name' ist. Beide Argumente werden vom Hauptteil von msg an die Funktion übergeben. Im Hauptteil des Skripts werden wir sehen, wie wir 'reciever_mail_address' und 'name' finden.

Das Senden von E-Mails mit smtplib wurde oben erläutert, sodass Sie es lesen können und hier nicht darauf eingegangen wird.

Im Hauptteil gehen wir in das Verzeichnis, in dem wir 'birthday_file' mit 'os . gespeichert haben.chdir()'. Dann haben wir eine 'while-Schleife', die immer wahr ist, damit der Geburtstag kontinuierlich überprüft wird. Jetzt erhalten wir das aktuelle Datum und die aktuelle Uhrzeit und speichern sie in der Variablen 'heute'. Es sieht aus wie das.

2019-11-01 16:19:07.144925

Wir extrahieren Jahr, Monat, Tag, Stunde, Minuten und Sekunden mithilfe von Indizes dieser Größen. Danach öffnen wir birthday_file in einem Objekt 'birthday_file' im Lesemodus, sodass wir es nur lesen können. Jetzt speichern wir alle Zeilen dieser Datei in der Zeilenliste save. 'geburtstagsdatei.readlines()' speichert jede Zeile in der 'lines'-Liste. Danach schließen wir birthday_file mit 'birthday_file.close()'-Funktion.

Jetzt werden wir jede Zeile nacheinander mit der for-Schleife lesen. In jeder Zeile sind in 'birthday_file' nur die Daten einer Person verfügbar, daher lesen wir in dieser Schleife nur die Daten einer Person gleichzeitig.

Danach extrahieren wir das Geburtsdatum, die E-Mail-Adresse und den Namen der Person mit dem RE-Modul. Da wir das Datum im folgenden Format geschrieben haben

JJJJ-MM-TT

Also erstellen wir einen regulären Ausdruck 'dateEx', der dieses Format in der Zeile findet.

Re.compilieren(r”\d4-\d2-\d2”)

Der obige Befehl sucht eine Zeichenfolge mit '4 Ziffern' gefolgt von '-', dann '2 Ziffern' gefolgt von '-' und '2 Ziffern'. Dadurch erhalten wir das Geburtsdatum der Person, also extrahieren wir den Geburts-Tag und den Geburts-Monat aus diesem Ausdruck.

Ebenso finden wir E-Mail-Adressen mit regulären Ausdrücken. Danach vergleichen wir den Geburtstag_Monat und den aktuellen_Monat und den Geburtstag_Tag und den aktuellen_Tag. Wenn diese Bedingungen erfüllt sind, senden wir die Geburtstags-E-Mail mit der Funktion 'send_mail' um genau '08:00'.

Skript automatisch über Cronjob ausführen

Jetzt werden wir sicherstellen, dass dieses Python-Skript jedes Mal ausgeführt wird. Dazu fügen wir diese Aufgabe zu crontab . hinzu. Crontab wird unter Linux verwendet, um Aufgaben automatisch auszuführen. Was wir tun müssen, ist einfach die Aufgabe zu crontab . hinzuzufügen. Befolgen Sie dazu die angegebenen Schritte.

  1. Öffnen Sie crontab, um eine Aufgabe in Ihrem Terminal hinzuzufügen, indem Sie den folgenden Befehl verwenden
[email protected]:~$ crontab -e
  1. Geben Sie am Ende dieser Datei folgenden Befehl ohne # ein
@reboot python path_to_the_script

Die obigen Befehle ermöglichen Ihrem System, das Python-Skript jedes Mal auszuführen, wenn Sie Ihr System neu starten. Auf diese Weise wird Ihr System jedes Mal Python-Skript ausführen, wenn Ihr System eingeschaltet ist.

So ändern Sie die linke und rechte Maustaste auf einem Windows 10-PC
Es ist ganz normal, dass alle Computer-Maus-Geräte ergonomisch für Rechtshänder gestaltet sind. Es gibt aber auch Mausgeräte, die speziell für Linkshä...
Emulieren Sie Mausklicks, indem Sie den Mauszeiger mit der klicklosen Maus in Windows 10 bewegen
Die Verwendung einer Maus oder Tastatur in der falschen Haltung bei übermäßiger Nutzung kann zu vielen gesundheitlichen Problemen führen, einschließli...
Fügen Sie mit diesen kostenlosen Tools Mausgesten zu Windows 10 hinzu
In den letzten Jahren haben sich Computer und Betriebssysteme stark weiterentwickelt. Es gab eine Zeit, in der Benutzer Befehle verwenden mussten, um ...