Senden von E -Mails mit Python

Senden von E -Mails mit Python
Das Senden, Überprüfen und Antworten auf E -Mails ist eine zeitaufwändige Aufgabe, insbesondere wenn Sie dies für eine große Anzahl von Personen oder Kunden tun, bei denen Sie nur den Namen, die Adresse, das Alter und die anderen kleinen 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 auch eine Menge Dinge automatisieren, die Ihnen irgendwann viel Zeit sparen werden.

Sie möchten beispielsweise eine Erinnerung an Ihre Kunden für ihre verbleibenden Rechnungen senden und alle kundenbezogenen Daten wie ihre Telefonnummern, Adresse, Alter usw. in einem Excel -Blatt oder einer Datenbank haben, anstatt es manuell zu tun, können Sie eine schreiben Einfaches Programm in Python, um das automatisch für Sie zu tun. In diesem Tutorial erfahren wir, wie E -Mail -Protokoll funktioniert und wie Sie den Prozess automatisieren können, um Ihre kostbare Zeit zu speichern.

Ein Wort über SMTP

Das einfache Mail -Transferprotokoll (SMTP) ist ein computergestütztes Äquivalent Ihres Postdienstes. Es ist ein Protokoll, das auf Anwendungsschicht eines TCP/IP -Netzwerks funktioniert. Es ist ein Standardprotokoll zum Senden und Empfangen von E -Mails über das Internet. Der Postübertragungsprozess besteht aus E -Mail -Servern und Kunden, die E -Mails aneinander senden und empfangen.

Zum Beispiel haben Sie ein Google Mail -Konto und möchten eine E -Mail an Ihren Freund in seinem Yahoo -Konto senden. Sie schreiben eine E -Mail und klicken. Ihr SMTP -E -Mail -Client sendet zuerst sendet Helo (oder Ehlo) Auf den Google Mail -Server können Sie sagen, dass dieser Befehl oder Header gleichwertig ist Gastgeber Header im HTTP -Protokoll und wird verwendet, um den Server mithilfe des Domänennamens zu identifizieren. Nach Helo oder EHLO authentifiziert sich der Client mit dem angegebenen Benutzernamen und Passwort mit dem gegebenen Nutzungsnamen und Kennwort Auth Befehl. Anschließend gibt es die E -Mail -Adresse des Absenders und des Empfängers an und dann die Nachricht und sendet E -Mail an den Google Mail -Server. Google Mail Server bestätigt zunächst, ob die E -Mail -Adresse des Empfängers auf Yahoo existiert oder nicht, die E -Mail an Yahoo Server, an dem der Empfänger seine E -Mails abrufen kann.

SMTPLIB

SMTPLIB ist eine Python -Bibliothek, die als SMTP -Client genau wie Ihr Google Mail, Yahoo, Thunderbird oder einen anderen E -Mail -Client verwendet werden kann und zum Senden von E -Mails verwendet werden kann. Wir können alle Aufgaben mithilfe von SMTPLIB -Client ausführen, die wir mit der grafischen Benutzeroberfläche ausführen können.

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

Ubuntu@ubuntu: ~ $ pip install SMTPLIB

Oder in Python3

Ubuntu@ubuntu: ~ $ pip install SMTPLIB

Schreiben Sie Ihre erste E -Mail mit Python

In diesem Tutorial verwende ich ein Google Mail -Konto als Absender. Außerdem werde ich die Python -Konsole verwenden, daher werde es für mich einfacher, jede Codezeile Schritt für Schritt zu erklären. Um loszulegen, müssen wir unseren Google Mail -Zugriff auf weniger sichere Apps ermöglichen.

Melden Sie sich also in Ihrem Google Mail -Konto an und gehen Sie dann zu den Kontoeinstellungen.

Stellen Sie nun sicher, dass der Zugriff auf weniger sichere Apps eingeschaltet ist.

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

Ubuntu@Ubuntu: ~ $ 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" für weitere Informationen ein.

// die SMTP -Bibliothek importieren
>>> SMTPLIB importieren
// eine Verbindung zum Google Mail -Server mit Domänenname und Portnummer herstellen (diese Einstellung unterscheidet sich für
In jedem E -Mail -Anbieter schauen Sie sich den unten angegebenen Tisch an
>>> MailObj = SMTPLIB.SMTP ('SMTP.Google Mail.com ', 587)
// Sag Hallo zum Server
>>> MailObj.Ehlo ()
(250, 'SMTP.Google Mail.com zu Ihrem Service, [103.255.4.246] \ nsize35882577 \ n8bitmime \ nstarttls \
nenhancedStatuscodes \ npipelining \ nchunking \ nsMtputf8 '))
// Port 587 bedeutet, dass wir verschlüsselte TLS -Verbindung verwenden. Starten Sie also verschlüsseltes TLS
Kommunikation mit starttls (), damit unsere Anmeldeinformationen und Nachrichten nicht schnüffeln
>>> MailObj.Starttls ()
(220, '2.0.0 Bereit, TLS zu starten.)
// Melden Sie sich in Ihrem Google Mail -Konto mit E -Mail und Passwort an
>>> MailObj.Login ('[email protected] ',' s3cr3t_p4ssw0rd ')
(235, '2.7.0 akzeptiert ')
// Geben Sie die E -Mail -Adresse und den E -Mail -Inhalt des Senders und des Empfängers an
>>> MailObj.sendmail ('[email protected] ', [email protected] ',' Thema:
Hallo Welt! \ n Hallo Welt! Dies ist meine erste Hello World -E -Mail in Python ')

// Die Verbindung zum Google Mail -Server schließen
>>> MailObj.aufhören()
(221, '2.0.0 Schließanschluss B6SM4519863LFI.72 - GSMTP ')

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

Name Serverdomainname Hafen
Google Mail SMTP.Google Mail.com 587
Outlook / Hotmail SMTP-E-Mail.Ausblick.com 587
Yahoo Mail SMTP.Post.Yahoo.com 587
Verizon SMTP.Verizon.Netz 465
Comcast SMTP.Comcast.Netz 587

Einige Worte über IMAP

Wir haben also nur untersucht, dass SMTP zum Senden von E -Mails verwendet wird, aber was ist IMAP (Internetzugang Messaging Protocol) für? SMTP kann nicht verwendet werden, um E -Mails vom Server, IMAP oder POP3 -Protokoll zu durchsuchen und zu erhalten, wird für diesen Zweck verwendet.

IMAPCLIENT, IMAPLIB und PYZMAIL

In Python gibt es zwei Hauptbibliotheken, die als IMAP -Client verwendet werden können. Python hat Standard IMAPLIB Bibliothek aber eine andere externe Bibliothek iMapclient ist effektiver und einfacher zu bedienen. In diesem Tutorial werden wir verwenden iMapclient Um E -Mails vom Mailserver abzurufen.

Das Problem mit iMapclient ist, dass es E -Mails von Mail Server im RAW -Format abruft. Wir brauchen also Pyzmail Bibliothek als Parser für benutzerfreundliche Ausgabe. Um beide Bibliotheken zu installieren, geben Sie an

Ubuntu@Ubuntu: ~ $ sudo pip install iMapclient
Ubuntu@Ubuntu: ~ $ sudo pip install pyzmail

Wenn Sie Ihre E -Mails vom Mailserver erhalten

Jetzt lernen wir, wie Sie E -Mails vom Mailserver mit IMAPClient durchsuchen und herunterladen. Wir werden iMapclient verwenden, um E -Mails vom Server zu durchsuchen und herunterzuladen, und dann verwenden wir Pyzmail, um diesen Rohinhalt zu analysieren. Lasst uns

// IMAPCLIENT -Bibliothek importieren
>>> Imapclient importieren
// eine Verbindung zum IMAP -Server von Google Mail herstellen
>>> obj = iMapclient.IMapclient ('IMAP.Google Mail.com ', ssl = true)
// Melden Sie sich mit Ihren Anmeldeinformationen in Ihrem E -Mail -Konto an
>>> obj.Login ('SecretAccount@Google Mail.com ',' s3cr4tp4ss ')
'[email protected] authentifiziert (Erfolg) '
// Wählen Sie den Nachrichtenordner zum Lesen i I.E Posteingang, Entwürfe, gesendete Mails
>>> obj.SELECT_FOLDER ('Posteingang', readonly = true)
'Existiert': 830, 'PermanentFlags': (), 'Hochestmodseq': 112999, 'uidnext': 931,
'Flags': ('\\ beantwortet', '\\ ordnungsgemäß', '\\ Draft', '\\ Deleted', '\\ Sehen' ',
'$ Notphishing', '$ phishing'), 'uidvalidity': 1, 'schreibgeschützt': ["], 'neuer': 0
// Suchen Sie Ihre Nachrichten in Ihrem Posteingang oder wenden Sie einen Filter an, der unten Filter anzeigt
Sie die E-Mails, die nach dem 25. Oktober 2019 erhalten wurden
>>> mail_ids = obj.Suche (['seit', '25 -oct-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 25. Oktober 2019 empfangenen E-Mail-IDs,
Sie können eine E -Mail mit iMapclient -Fetch -Funktion herunterladen.
>>> raw_mail = obj.Fetch ([919], ['Body []', 'Flags'])
// Jetzt ist der Inhalt in RAW_MAIL -Variable im RAW -Format, er kann nicht auf der angezeigt werden
Bildschirm direkt, sodass wir einen Parser benötigen, um diesen Inhalt für eine benutzerfreundliche Ausgabe zu analysieren
>>> Pyzmail importieren
>>> message = pyzmail.Pyzmessage.FACTORY (RAW_MAIL [919] ['Body []'])
// Jetzt wird E -Mail analysiert und in Nachrichtenvariable gespeichert, um das Thema von zu erhalten
In der E -Mail -Funktion Get_Subject -Funktion
>>> Nachricht.get_subject ()
Sie werden Ihre Fähigkeiten in diesem Halloween mit 25% Rabatt erhöhen
// In ähnlicher Weise können Sie Absenderdetails sehen
>>> Nachricht.get_addresses ('from')
[(u'usama azad ', [email protected] ')]
>>> Nachricht.get_addresses ('to')
[(u'[email protected] ',' [email protected] ')]
// Um ​​den Körper der E -Mail zu erhalten, geben Sie an
>>> Nachricht.text_part.get_payload ().dekodieren (Nachricht.text_part.Charset)
u ”hi! Genießen Sie Wohnungen 25% in unseren Premium -Kursen. “

Wenn Sie ein Konto in einem anderen E -Mail -Service -Anbieter als Google Mail haben, können Sie sich bei ihrem IMAP -Server anmelden. Hier ist die Liste der IMAP -Domain -Namen einiger berühmter Mail -Anbieter.

Anbieter Domänenname für IMAP -Server
Yahoo IMAP.Post.Yahoo.com
Hotmail/Outlook IMAP-Mail.Ausblick.com
Verizon eingehend.Verizon.Netz
Comcast IMAP.Comcast.Netz
AT & T IMAP.Post.Att.Netz

Löschen Ihrer E -Mail vom IMAP -Server

Ähnlich wie bei der Suche und Abrufen von E -Mails vom Server können Sie auch E -Mails mit der UID von Ihrem Mailserver löschen. Befolgen Sie einfach die angegebenen Schritte

// Um ​​eine E -Mail zu löschen
E -Mails
>>> obj.SELECT_FOLDER ('Posteingang', readonly = false)
>>> mail_ids = obj.Suche (['seit', '25 -oct-2019 '])
>>> Mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Geben Sie eine E -Mail -UID oder eine Liste der E -Mail -UIDs an, nachdem Sie den folgenden Befehl ausgeführt haben,
Ihre E -Mail wird aus dem Posteingang verschwunden.
>>> obj.Delete_Messages (919)
919: ('\\ gesehen', '\\ gelöscht')
// Dieser Befehl löscht Ihre E -Mails dauerhaft über den Mailserver
>>> obj.Expunge ()
('Erfolg', [])

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

Machen Sie Ihre eigene Geburtstagserinnerung

Sie haben Geburtstage Ihrer Freunde in den kommenden Monaten und möchten sie an ihren Geburtstagen wünschen. Aber Sie haben viel Arbeit in Ihrem Büro und es besteht die Möglichkeit, dass Sie es vergessen, ihnen zu wünschen. Diese Aufgabe kann also automatisch mit Python ausgeführt werden. Im Folgenden finden Sie den Code, um diese Aufgabe auszuführen.

// Module importieren
Import Re
// OS -Modul wird verwendet, um Betriebssystemaufgaben auszuführen i.E Zugriff auf Direcotories
OS importieren
DateTime importieren
SMTPLIB importieren
// Definieren einer Funktion, die E -Mails sendet
Def send_mail (reciever_mail_address, Name):
SENTER_MAIL_ADDRESS = "[email protected] "
passwd = "Senderpasswd"
// eine Verbindung zum Google Mail -Server mit Domänenname und Portnummer herstellen
OBJ = SMTPLIB.SMTP ('SMTP.Google Mail.com ', 587)
obj.Ehlo ()
obj.Starttls ()
// Anmeldung in Ihr Google Mail -Konto
obj.Login (SENTER_MAIL_ADDRESS, PASSWD)
// E -Mail an 'reciever_mail_address' senden.
obj.sendmail (SENTER_MAIL_ADDRESS, reciever_mail_address, "Betreff: Geburtstagswünsche mail \ n \ n HappyBirthday"+Name)
// Endverbindung
obj.aufhören()
// Hauptkörper
// zu dem Verzeichnis gehen, in dem Datei mit Daten vorhanden ist
Betriebssystem.chdir ("path_to_birthday_data_file"))
während 1:
// Datum und Uhrzeit des gegenwärtigen Moments bekommen
heute = datetime.Terminzeit.Heute()
heute = str (heute)
// Aktuelles Jahr, Monat, Tag, Stunde, Minute und zweite Werbung bekommen
current_year = heute [0: 4]
current_month = heute [5: 7]
current_day = heute [8:10]
current_hour = heute [11:13]
current_minute = heute [14:16]
current_sec = heute [17:19]
// Die Geburtstagsdatei im Objekt 'birthday_file' im Lesemodus eröffnen
birthday_file = open ('birthday_file', 'r')
// Sparen Sie alle Zeilen von 'birthday_file' in der Linienliste
line = birthday_file.Readlines ()
// '' birthday_file 'Objekt schließen
birthday_file.schließen()
// Lesen Sie jede Zeile mit für die Schleife
Für Zeilen in Linien:
// einen regulären Ausdruck machen, um ein Datum in 'birthday_file' zu finden
DateEx = re.compile (r "\ d 4-\ d 2-\ d 2")
findDate = datex.Suche (Zeile)
Datum = findDate.Gruppe()
// von der Datei von der Datei zum Geburtstag bekommen und birthday_day
birthday_month = Datum [5: 7]
birthday_day = Datum [8:10]
// einen regulären Ausdruck machen, um eine Mail -Adresse von birthday_file zu finden
Mailex = re.kompilieren (r "\ w*@\ w*.com ")
findMail = Mailex.Suche (Zeile)
reciever_mail = findmail.Gruppe()
// einen regulären Ausdruck machen, um den Namen der Person zu finden
nameEx = re.kompilieren (r "\ w*")
findName = namex.Suche (Zeile)
name = findName.Gruppe()
// Überprüfen Sie, ob jemandes Geburtstag kommt oder nicht
If current_month == birthday_month und = current_day == birthday_day:
// Post genau um 08:00 Uhr senden
Wenn current_hour == '08' und current_minute == '00' und current_sec == '00':
// Funktion 'send_mail' aufrufen
send_mail (reciever_mail, name)

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

Erläuterung

Wir werden diese Datei mit Python -Skript und überprüfen, wessen Geburtstag kommt, und sie wünschen ihnen. Zunächst werden wir einige Module importieren. Das DateTime -Modul hat Funktionen, die uns aktuelles Datum und Uhrzeit und vieles mehr geben. Aber wir werden dies nur verwenden, um das aktuelle Datum und die aktuelle Uhrzeit zu finden. Das SMTPLIB -Modul wird zum Senden von Mail verwendet und wurde oben erläutert. Das Re -Modul hat Funktionen, mit denen regelmäßig Ausdruck aus einer Zeichenfolge ermittelt wird.

In diesem Skript definieren wir die Funktion "send_mail", die Mail an die 'Reciever_mail_address' sendet, deren Name 'Name' lautet. Beide Argumente werden vom Hauptteil der 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 sie lesen können und es hier nicht besprochen wird.

In der Hauptkörper gehen wir in das Verzeichnis, in dem wir "birthday_file" mit "os" gespeichert haben.chdir () '. Dann haben wir eine 'während der Schleife', die immer wahr ist, sodass er den Geburtstag ununterbrochen überprüft. Jetzt erhalten wir das aktuelle Datum und die aktuelle Uhrzeit und speichern es in 'Today' Variable. Es sieht aus wie das.

2019-11-01 16:19:07.144925

Wir werden Jahr, Monat, Tag, Stunde, Minuten und Sekunden mit Indizes dieser Mengen extrahieren. Danach werden wir in einem Objekt 'birthday_file' im Lesemodus Geburtstagsfile öffnen, damit wir es nur lesen können. Jetzt speichern wir alle Zeilen dieser Datei in Linienliste. 'birthday_file.Readlines () "speichert jede Zeile in" Zeilen "-Liste. Danach werden wir mit 'birthday_file "für birthday_file schließen.Close () 'Funktion.

Jetzt lesen wir jede Zeile eins nach dem anderen mit für die Schleife. In jeder Zeile sind nur die Daten einer Person in 'birthday_file' verfügbar, sodass wir in dieser Schleife gleichzeitig nur die Daten einer Person lesen.

Danach extrahieren wir Geburtsdatum, E -Mail -Adresse und Name der Person, die das RE -Modul verwendet. Wie wir das Datum im folgenden Format geschrieben haben

Yjyy-mm-dd

Wir werden also einen regulären Ausdruck "Datex" erstellen, der dieses Format in der Linie findet.

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

Oben Befehl Finden Sie eine Zeichenfolge, die "4 Ziffern" hat, gefolgt von '-' Dann '2 Digits', gefolgt von '-' und '2 Ziffern'. Dies gibt uns das Geburtsdatum der Person, damit wir aus diesem Ausdruck Geburtsday und Birth_Month extrahieren werden.

Ebenso finden wir eine E -Mail -Adresse mit regulären Ausdrücken. Danach vergleichen wir den Geburtstagsmonth und Current_Month und Birthday_Day und Current_Day. Wenn diese Bedingungen erfüllt sind, senden wir die Geburtstags -E -Mail mit der Funktion 'send_mail' bei exact '08: 00 'mit' send_mail '.

Skript automatisch über Cronjob ausführen

Jetzt werden wir sicherstellen, dass dieses Python -Skript jedes Mal ausgeführt wird. Dazu werden wir diese Aufgabe zu Crontab hinzufügen. Crontab unter Linux wird 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 die Aufgabe in Ihrem Terminal mit dem folgenden Befehl hinzuzufügen
Ubuntu@Ubuntu: ~ $ crontab -e
  1. Am Ende dieser Datei geben Sie den folgenden Befehl ohne # ein
@Reboot Python path_to_the_script

Oben Befehle ermöglicht es Ihrem System, das Python -Skript jedes Mal auszuführen, wenn Sie Ihr System neu starten. Auf diese Weise wird Ihr System jedes Mal ausgeführt, wenn Ihr System eingeschaltet ist.