Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt

Einführung

In diesem Artikel werden wir eine Anwendung entwickeln, die Python verwendet. Die Standardbibliothek tkinter wird als GUI-Bibliothek verwendet. Die Standardbibliothek smtplib wird zum Senden von E-Mails verwendet. Wenn Sie Python bis zu einem gewissen Grad verstehen, indem Sie diesen Artikel lesen, können Sie lernen, wie Sie tkinter und smtplib bis zu einem gewissen Grad verwenden.

Was ist tkinter?

Es ist eine der Standard-Python-Bibliotheken. Eine Bibliothek zum Erstellen von GUI-Anwendungen. Eine GUI-Bibliothek mit einfacher Grammatik und schnellem Start.

Ein Fenster erstellen

Zuerst erstellen wir ein Fenster, das wird.

import tkinter as tk

if __name__ == "__main__":
    root = tk.Tk()
    root.mainloop()

01_ウィンドウ.png

Bildschirm erstellen

Wir werden eine Klasse erstellen, die die Frame-Klasse erbt, um unter Berücksichtigung der Objektorientierung zu schreiben. Erstellen Sie die erforderlichen Teile (Widgets) in create_widgets (), ordnen Sie sie an und erstellen Sie den Bildschirm.

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.pack()

        #Stellen Sie Bildschirmgröße und Titel ein
        master.geometry("300x200")
        master.title("Einfache Mail-Versand-App")

        self.create_widgets()

    #Methode zum Generieren eines Widgets
    def create_widgets(self):
        self.label = tk.Label(self,text="Einfache Mail-Versand-App")
        self.label.grid(row=0, column=0, columnspan=3)

        self.to_label = tk.Label(self, text="Ziel:")
        self.to_entry = tk.Entry(self, width=20)
        self.to_label.grid(row=1, column=0)
        self.to_entry.grid(row=1, column=1, columnspan=2)

        self.subject_label = tk.Label(self, text="Gegenstand:")
        self.subject_entry = tk.Entry(self, width=20)
        self.subject_label.grid(row=2, column=0)
        self.subject_entry.grid(row=2, column=1, columnspan=2)

        self.body_label = tk.Label(self, text="Text:")
        self.body_text = tk.Entry(self, width=20)
        self.body_label.grid(row=3, column=0)
        self.body_text.grid(row=3, column=1, columnspan=2)

        self.button = tk.Button(self, text="Senden")
        self.button.grid(row=4, column=2, sticky=tk.E, pady=10)

if __name__ == "__main__":
    root = tk.Tk()
    Application(master=root)
    root.mainloop()

02_画面レイアウト完成.png

Einstellungen für die Ereignisverarbeitung

Legen Sie die Ereignisverarbeitung für die Schaltfläche "Senden" fest. Ereignisverarbeitung ist die Verarbeitung (Methode), die beim Drücken der Taste aufgerufen wird. Legen Sie die Ereignisverarbeitung mit einem Lambda-Ausdruck im Argumentbefehl fest, wenn die Schaltfläche generiert wird. Stellen Sie den Prozess so ein, dass der Eingabewert vorerst an die Standardausgabe (Konsole) ausgegeben wird.

    #Methode zum Generieren eines Widgets
    def create_widgets(self):
    
	#~ Ausgelassen ~
    
        self.button = tk.Button(self, text="Senden", command=lambda:self.click_event())
        self.button.grid(row=4, column=2, sticky=tk.E, pady=10)

    def click_event(self):
        to = self.to_entry.get()
        subject = self.subject_entry.get()
        body = self.body_text.get()

        print(f"Ziel:{to}")
        print(f"Gegenstand:{subject}")
        print(f"Text:{body}")

03_イベント処理.png

Konsolenanzeigeergebnis

Ziel:[email protected]
Gegenstand:Über das Treffen des anderen Tages
Text:Vielen Dank für das Treffen neulich.

Vorbereitung zum Senden einer E-Mail

Vor dem Erstellen des E-Mail-Sendevorgangs ist eine kleine Vorbereitung erforderlich. Dieses Mal werde ich es unter der Annahme erstellen, dass es vom Google Mail-Konto gesendet wird. Wenn Sie noch kein Google Mail-Konto haben, erstellen Sie zunächst eines über den unten stehenden Link. Wenn Sie bereits eines haben, empfehlen wir Ihnen, ein Unterkonto für die Entwicklung zu erstellen. (Wie Sie unten sehen können, müssen Sie die Sicherheitseinstellungen Ihres Kontos etwas verringern.) https://accounts.google.com/SignUp

Wenn Sie bereits ein Konto haben oder ein neues Konto erstellt haben, müssen Sie einige Änderungen an Ihren Kontoeinstellungen vornehmen, um E-Mails von Python-Programmen zu senden. Führen Sie die folgenden Schritte aus, um den Bildschirm "Kontoeinstellungen" anzuzeigen. 04_アカウント設定.png

Wählen Sie dann im Menü links die Option Sicherheit. 05_セキュリティメニュー.png

Scrollen Sie zum unteren Bildschirmrand und schalten Sie "Zugriff auf unsichere Apps" auf "Ein". 06_安全性の低いアプリ.png

Sie können sich jetzt von Ihrem Python-Programm aus bei Google Mail anmelden und Ihre E-Mail senden.

E-Mail-Sendevorgang

Ich werde den Teil der Postübertragungsverarbeitung machen. Importieren Sie zunächst die zum Senden von E-Mails erforderliche Bibliothek.

from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

Als Nächstes erstellen wir eine Methode zum Senden von E-Mails. Der Teil, der sich bei jedem Senden einer E-Mail dynamisch ändert, wird als Methodenargument empfangen. Werte, die sich nicht jedes Mal ändern, wenn eine E-Mail gesendet wird, werden in der Methode als Konstanten definiert. Die ID und der PASS sind die Google Mail-E-Mail-Adresse und das Kennwort des Absenders. Bitte stellen Sie dies entsprechend Ihrer eigenen Umgebung ein.

    #E-Mail-Sendevorgang
    def send_mail(self, to, subject, body):
        #Definieren Sie die für die Übertragung erforderlichen Informationen mit einer Konstanten
        ID = "mail_address"
        PASS = "password"
        HOST = "smtp.gmail.com"
        PORT = 587

        #E-Mail-Text festlegen
        msg = MIMEMultipart()
        msg.attach(MIMEText(body, "html"))

        #Stellen Sie Betreff, Quelladresse und Zieladresse ein
        msg["Subject"] = subject
        msg["From"] = ID
        msg["To"] = to

        #Stellen Sie eine Verbindung zum SMTP-Server her und starten Sie die TLS-Kommunikation
        server=SMTP(HOST, PORT)
        server.starttls()

        server.login(ID, PASS) #Anmeldeauthentifizierungsprozess

        server.send_message(msg)    #E-Mail-Sendevorgang

        server.quit()       #TLS-Kommunikationsende

Verknüpfung der Ereignisverarbeitung

Wenn Sie den Ereignisverarbeitungsteil so ändern, dass die zuvor erstellte Methode aufgerufen wird, ist die einfache E-Mail-Sendeanwendung abgeschlossen.

    def click_event(self):
        to = self.to_entry.get()
        subject = self.subject_entry.get()
        body = self.body_text.get()

        # print(f"Ziel:{to}")
        # print(f"Gegenstand:{subject}")
        # print(f"Text:{body}")
    
        self.send_mail(to=to, subject=subject, body=body)

Quellcode abgeschlossen

Der vollständige Quellcode lautet wie folgt.

import tkinter as tk
from smtplib import SMTP
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

class Application(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.pack()

        #Stellen Sie Bildschirmgröße und Titel ein
        master.geometry("300x200")
        master.title("Einfache Mail-Versand-App")

        self.create_widgets()

    #Methode zum Generieren eines Widgets
    def create_widgets(self):
        self.label = tk.Label(self,text="Einfache Mail-Versand-App")
        self.label.grid(row=0, column=0, columnspan=3)

        self.to_label = tk.Label(self, text="Ziel:")
        self.to_entry = tk.Entry(self, width=20)
        self.to_label.grid(row=1, column=0)
        self.to_entry.grid(row=1, column=1, columnspan=2)

        self.subject_label = tk.Label(self, text="Gegenstand:")
        self.subject_entry = tk.Entry(self, width=20)
        self.subject_label.grid(row=2, column=0)
        self.subject_entry.grid(row=2, column=1, columnspan=2)

        self.body_label = tk.Label(self, text="Text:")
        self.body_text = tk.Entry(self, width=20)
        self.body_label.grid(row=3, column=0)
        self.body_text.grid(row=3, column=1, columnspan=2)

        self.button = tk.Button(self, text="Senden", command=lambda:self.click_event())
        self.button.grid(row=4, column=2, sticky=tk.E, pady=10)

    def click_event(self):
        to = self.to_entry.get()
        subject = self.subject_entry.get()
        body = self.body_text.get()
    
        self.send_mail(to=to, subject=subject, body=body)

    #E-Mail-Sendevorgang
    def send_mail(self, to, subject, body):
        #Definieren Sie die für die Übertragung erforderlichen Informationen mit einer Konstanten
        ID = "mail_address"
        PASS = "password"
        HOST = "smtp.gmail.com"
        PORT = 587

        #E-Mail-Text festlegen
        msg = MIMEMultipart()
        msg.attach(MIMEText(body, "html"))

        #Stellen Sie Betreff, Quelladresse und Zieladresse ein
        msg["Subject"] = subject
        msg["From"] = ID
        msg["To"] = to

        #Stellen Sie eine Verbindung zum SMTP-Server her und starten Sie die TLS-Kommunikation
        server=SMTP(HOST, PORT)
        server.starttls()   #Die TLS-Kommunikation wurde gestartet

        server.login(ID, PASS) #Anmeldeauthentifizierungsprozess

        server.send_message(msg)    #E-Mail-Sendevorgang

        server.quit()       #TLS-Kommunikationsende

if __name__ == "__main__":
    root = tk.Tk()
    Application(master=root)
    root.mainloop()

Schließlich

Wenn Sie nach dem Ausprobieren eine E-Mail-Sende-App erstellen möchten, stellen Sie die Sicherheitseinstellungen Ihres Google-Kontos wieder her.

Recommended Posts

Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
[Python] Ich habe versucht, automatisch einen täglichen Bericht über YWT mit Outlook-Mail zu erstellen
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Rubyist hat versucht, eine einfache API mit Python + Flasche + MySQL zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
[Python] Ich habe versucht, mit tkinter eine Anwendung zu erstellen, die das Gehalt anhand der Arbeitszeit berechnet
Ich möchte ein Spiel mit Python machen
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Ich habe versucht, eine OCR-App mit PySimpleGUI zu erstellen
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Ich habe verschiedene Methoden ausprobiert, um japanische Post mit Python zu senden
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren
Ich habe mit PyQt einen einfachen Texteditor erstellt
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
Ich habe eine Funktion zum Abrufen von Daten aus der Datenbank spaltenweise mithilfe von SQL mit SQLite3 von Python [SQLite3, SQL, Pandas] erstellt.
[1 Stunde Herausforderung] Ich habe versucht, eine Wahrsagerseite zu erstellen, die für Python zu geeignet ist
[Python] Ich habe versucht, eine stabile Sortierung zu implementieren
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe versucht zu beheben "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren"
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, einen Generator zu erstellen, der mit Python eine C # -Containerklasse aus CSV generiert
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
[Python] Einfaches Japanisch ⇒ Ich habe versucht, ein englisches Übersetzungswerkzeug zu erstellen
Ich habe eine Web-API erstellt
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, automatisch Bilder von Kanna Hashimoto mit Python zu sammeln! !!
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert