Ich habe versucht, das automatische Senden einer E-Mail durch Doppelklicken auf das Symbol [Python] zu ermöglichen

Zusammenfassung

Ich habe mich für die Automatisierung entschieden, da es schwierig ist, regelmäßig E-Mails zu senden.

Für die Automatisierung haben wir uns entschieden, eine zu erstellen, die die folgenden Anforderungen erfüllt.

    1. Ich möchte eine bestimmte Datei automatisch anhängen
  1. Ich möchte gleichzeitig an E-Mails angehängte Dateien auf Google Drive hochladen
    1. Ich möchte nur beim Senden einer E-Mail online gehen und sofort nach dem Senden offline gehen

Deshalb habe ich beschlossen, ein Tool in Python zu erstellen, das die oben genannten Anforderungen erfüllt.

Zunächst überlegte ich, ob die oben genannten drei Anforderungen wirklich erfüllt wurden.

Anforderung 1: Ich möchte eine bestimmte Datei automatisch anhängen

Ich fand heraus, dass imaplib, ein Paket zum Senden von E-Mails mit Python, auch Dateien anhängen kann, und entschied mich daher, es zu verwenden.

Anforderung 2: Ich möchte gleichzeitig an E-Mails angehängte Dateien auf Google Drive hochladen

Nachdem ich dies ebenfalls untersucht hatte, stellte ich fest, dass es ein Paket namens PyDrive gibt, das Google Drive von Python aus betreibt, und entschied mich daher, es zu verwenden. Python ist zu bequem. ..

Anforderung 3: Ich möchte nur beim Senden einer E-Mail online gehen und sofort nach dem Senden offline gehen

Ich dachte leichtfertig, dass Python ein Paket sein würde, das Wi-Fi leicht verbinden / trennen könnte, aber leider konnte ich es nicht finden.

Ich habe jedoch festgestellt, dass PowserShell die Bedienung von Wi-Fi vereinfacht und dass PowerShell-Skripts auch von Python-Seite aus problemlos aufgerufen werden können. Daher habe ich beschlossen, Wi-Fi mit PowerShell auszuführen.

Implementierungsergebnisse

Platzieren Sie das erstellte Python-Skript und das PowerShell-Skript an der entsprechenden Stelle, platzieren Sie die Verknüpfung .py auf dem Desktop und klicken Sie darauf, um das automatische Senden von E-Mails auszuführen. Als Referenz sind die Implementierungsergebnisse wie folgt.

キャプチャ.JPG

Quelle

    1. Python: Hauptteil

auto_mail_tool.py


import os
import time
import email
import imaplib
import smtplib
import datetime
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from os.path import basename
from email.header import Header
from email.utils import formatdate
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication


#Stellen Sie eine Verbindung zu WLAN her/Trennen
def wifi(mode):

    if mode == 'connect':  #Stellen Sie eine Verbindung zum WLAN der angegebenen SSID her (die SSID selbst ist in PowerShell festgelegt).
        os.system('powershell -Command' + ' ' + \
                  'powershell -ExecutionPolicy RemoteSigned .\\wifi_on.ps1')

        time.sleep(5)

    elif mode == 'disconnect':  #Trennen Sie das angeschlossene WLAN

        os.system('powershell -Command' + ' ' + \
                  'powershell -ExecutionPolicy RemoteSigned .\\wifi_off.ps1')


#Laden Sie die Datei, die Sie an die ausgehende E-Mail anhängen möchten, auf Google Drive hoch
def up_file_on_drive():

    print('Ich lade eine Datei auf Google Drive hoch.')

    #Legen Sie den Pfad und den Dateinamen fest, in dem sich die hochzuladende Datei befindet
    tgtfolder = 'Dateipfad (ohne Dateinamen)'
    tgtfile = 'Der Name der Datei, die Sie hochladen möchten'
    dlttgt = 'title = ' + '"' + tgtfile + '"'  #Wird verwendet, um die Datei-ID abzurufen

    #Authentifizierungsprozess für die Verwendung der Google Drive-API
    gauth = GoogleAuth()
    drive = GoogleDrive(gauth)

    #Wenn eine gleichnamige Datei bereits gespeichert ist, löschen Sie sie
    file_id = drive.ListFile({'q': dlttgt}).GetList()[0]['id']
    f = drive.CreateFile({'id': file_id})
    f.Delete()

    time.sleep(3)

    #Datei hochladen
    folder_id = '1kCwhAtoPIi2TAUK0wiAr9ecYifyve7TW'
    f = drive.CreateFile({'title': tgtfile,
                         'mimeType': 'excel/xlsx',
                         'parents': [{'kind': 'drive#fileLink', 'id': folder_id}]})
    f.SetContentFile(tgtfolder + tgtfile)
    f.Upload()

    print('Der Datei-Upload ist abgeschlossen.')


#E-Mail mit Anhängen senden
def send_mail_with_file():

    st = get_mail_settings()  #Holen Sie sich den Inhalt der gesendeten Mail

    #Legen Sie den Inhalt der zu sendenden E-Mail fest
    msg = MIMEMultipart()
    msg["Subject"] = st['subject']
    msg["To"] = st['to_addr']
    msg["From"] = u'%s<%s>' % (str(Header(st['send_name'].encode(st['charset']), st['charset'])), st['from_addr'])
    msg['Bcc'] = st['bcc_addr']
    msg['Date'] = formatdate()
    msg.attach(MIMEText(st['body']))

    #Datei anhängen
    with open(st['file'], "rb") as f:
        part = MIMEApplication(f.read(), Name=basename(st['file']))
    part['attached_file'] = 'attachment; filename="%s"' % basename(st['file'])
    msg.attach(part)

    #Eine E-Mail senden
    smtpobj = smtplib.SMTP_SSL('smtp.gmail.com', 465, timeout=10)  #Geben Sie die Portnummer des SMTP-Servers von Google Mail an
    smtpobj.login(st['from_addr'], st['mypass'])
    smtpobj.send_message(msg=msg)
    smtpobj.close()


#Mail-Einstellungen abrufen
def get_mail_settings():
    info = {
        'charset': 'iso-2022-jp',
        'send_name': u'Name des Absenders',
        'from_addr': 'Absenderadresse',
        'mypass': 'Passwort für das Google Mail-Konto',
        'bcc_addr': 'Ziel 1,Ziel 2',
        'to_addr': 'Ziel 1,Ziel 2',
        'subject': 'E-Mail Betreff' + get_today(),
        'body': 'den Inhalt der E-Mail',
        'file': 'Pfad der Datei, die Sie anhängen möchten+Dateiname'
    }
    return info


#Überprüfen Sie, ob die E-Mail gesendet wurde
def confirm_mail_sent():

    print('Ich sende eine E-Mail.')

    st = get_mail_settings()  #Holen Sie sich den Inhalt der gesendeten Mail

    tgtac = imaplib.IMAP4_SSL('imap.gmail.com', 993)  #IMAP-Hostname (Posteingangsserver) und E-Mail-Empfangsportnummer über SSL
    tgtac.login(st['from_addr'], st['mypass'])

    waitsec = 10  #Zeitüberschreitungszeit der Bestätigungslogik für die E-Mail-Übertragung[sec]

    #Überprüfen Sie jede Sekunde anhand der neuesten E-Mail, ob die automatisch gesendete E-Mail empfangen wird
    for i in range(waitsec, 0, -1):

        lamtitle = get_latest_mail_title(tgtac)  #Holen Sie sich den Betreff der neuesten E-Mail

        time.sleep(1)  #1 Schleife 1 Sekunde

        if lamtitle == st['subject']:  #Wenn der Betreff der letzten E-Mail der einer automatisch gesendeten E-Mail ist
            print('\n Die automatische E-Mail-Übertragung ist abgeschlossen.\n')
            return

    #Wenn die Bestätigungszeit abgelaufen ist
    print('\n Fehler beim automatischen Senden von E-Mails.\n')


#Holen Sie sich den Betreff der neuesten E-Mail
def get_latest_mail_title(mail):
    mail.select('inbox')  #Mailboxauswahl
    data = mail.search(None, 'ALL')[1]  #Holen Sie sich alle Daten in Ihre Mailbox
    tgt = data[0].split()[-1]  #Holen Sie sich den neuesten Versandhandel
    x = mail.fetch(tgt, 'RFC822')[1]  #E-Mail-Informationen abrufen (geben Sie einen Standard an, der von Google Mail gelesen werden kann)
    ms = email.message_from_string(x[0][1].decode('iso-2022-jp'))  #Perspektive und bekommen

    sb = email.header.decode_header(ms.get('Subject'))
    ms_code = sb[0][1]  #Zeichencode-Erfassung

    #Erhalten Sie nur den Betreff der neuesten E-Mail
    if ms_code != None:
        mtitle = sb[0][0].decode(ms_code)
    else:
        mtitle = sb[0][0]

    return mtitle


#Holen Sie sich das heutige Datum
def get_today():
    now = datetime.date.today()
    tdy = str(now.year) + '/' + str(now.month) + '/' + str(now.day)  #Anzeige nach Datum
    wknum = now.weekday()  #Holen Sie sich die heutige Tagesnummer (0:Mond... 6:Tag)
    wk = get_now_weekday(wknum)  #Holen Sie sich den heutigen Tag

    return tdy + '(' + wk + ')'


#Holen Sie sich den heutigen Tag
def get_now_weekday(key):
    wkdict = {0: 'Mond', 1: 'Feuer', 2: 'Wasser', 3: 'Holz', 4: 'Geld', 5: 'Boden', 6: 'Tag'}
    return (wkdict[key])


if __name__ == '__main__':

    wifi('connect')        # 1.Verbinden Sie WLAN mit der angegebenen SSID
    up_file_on_drive()     # 2.Laden Sie die Datei hoch, die Sie an Google Drive anhängen möchten
    send_mail_with_file()  # 3.Senden Sie eine E-Mail mit einer angehängten Datei
    confirm_mail_sent()    # 4.Überprüfen Sie, ob die von GAS gesendete E-Mail eingetroffen ist
    wifi('disconnect')     # 5.Verbinden Sie WLAN mit der angegebenen SSID

    os.system('PAUSE')     #Stoppen Sie die Konsole

  1. PowerShell: Für Wi-Fi-Verbindung / Trennung

2-1. Beim Anschließen

wifi_on.ps1


netsh wlan connect name="Wi-Fi, das Sie verbinden möchten-Fi SSID"

2-2. Beim Trennen

wifi_off.ps1


netsh wlan disconnect

Anmerkungen: Wenn Sie .py von MATLAB aus aufrufen möchten

Schreiben Sie mit der Systemfunktion Folgendes in .m.

system('Willst du rennen.py Pfad')

Informationen, die als Referenz verwendet wurden

Insbesondere war ich den folgenden Seiten verpflichtet. Vielen Dank.

Inhalt Linkziel
Laden Sie Dateien mit PyDrive auf Google Drive hoch https://note.nkmk.me/python-pydrive-download-upload-delete/ https://qiita.com/akabei/items/f25e4f79dd7c2f754f0e
PowerShell-Skript von Python (.ps1) aufrufen https://tkstock.site/2019/10/07/python-powershell-shellscript-activate/
Verbinden / Trennen mit WLAN über PowerShell https://qiita.com/mindwood/items/22e0895473578c4e0c7e http://wgg.hatenablog.jp/entry/20161111/1478846489
Löschen Sie Dateien auf Google Drive https://note.nkmk.me/python-pydrive-download-upload-delete/
Erhalten Sie mit imaplib Informationen zu eingehenden E-Mails in Google Mail https://py.minitukuc.com/2017/11/07/gmailhonbun/
Stammfenster ausblenden, wenn Sie das Tkinter-Dialogfeld verwenden https://stackoverflow.com/questions/1406145/how-do-i-get-rid-of-python-tkinter-root-window
Senden Sie Google Mail mit Python https://qiita.com/nakasuke_/items/607cf74d8841f76e59c6
Fügen Sie beim Senden von Google Mail mit Python eine Datei hinzu https://time-space.kddi.com/ict-keywords/kaisetsu/20170824/2081
Legen Sie den Namen des Absenders fest, wenn Sie Google Mail in Python senden https://teratail.com/questions/128993

letzte

Wir freuen uns über Ihre Vorschläge, Verbesserungsvorschläge und Fehlervorschläge. Ich bin froh, wenn du es schaffst.

Recommended Posts

Ich habe versucht, das automatische Senden einer E-Mail durch Doppelklicken auf das Symbol [Python] zu ermöglichen
Ich habe versucht, das automatische Senden einer E-Mail durch Doppelklicken auf das Symbol [GAS / Python] zu ermöglichen
Geben Sie den Bericht mit Python aus DB in PDF aus, hängen Sie ihn automatisch an eine E-Mail an und senden Sie ihn
So senden Sie automatisch E-Mails mit Anhängen mithilfe der Google Mail-API in Python
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
[Python] Einfaches Japanisch ⇒ Ich habe versucht, ein englisches Übersetzungswerkzeug zu erstellen
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
[Python] Ich habe versucht, den kollektiven Typ (Satz) auf leicht verständliche Weise zusammenzufassen.
Als ich versuchte, Python auszuführen, wurde ich zum Microsoft Store übersprungen
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
[Zaif] Ich habe versucht, den Handel mit virtuellen Währungen mit Python zu vereinfachen
Ich habe versucht, die Neujahrskarte selbst mit Python zu analysieren
Ich habe versucht, ein System zu erstellen, um den Programmführer automatisch zu erfassen → ihn an einem Tag im Kalender zu registrieren
Ich habe versucht, durch Schaben ein Bild zu bekommen
Senden Sie eine E-Mail mit Python an Spushis Adresse
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe versucht, eine E-Mail mit SendGrid + Python zu senden
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
Ich habe mein Bestes versucht, um eine Optimierungsfunktion zu erstellen, aber es hat nicht funktioniert.
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
[Einführung] Ich habe versucht, es selbst zu implementieren, während ich den Dichotomiebaum erklärte
Ich habe versucht, einen automatischen Charakterdialoggenerator für die Markov-Kette im N-Stock zu erstellen
Ich habe versucht, das Telefon klingeln zu lassen, als es auf dem IoT-Post veröffentlicht wurde
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ein Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren [Tag 3 in die Wolken ...]
Ich habe versucht, Soma Cube mit Python zu lösen
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Python-Anfänger haben einen Chat-BOT erstellt, also habe ich versucht, zusammenzufassen, wie man es macht
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich möchte automatisch eine Unternehmensgründungs-E-Mail senden
[Einführung] Ich habe versucht, es selbst zu implementieren, während ich erklärte, um die Dichotomie zu verstehen
Ich habe versucht, eine OCR-App mit PySimpleGUI zu erstellen
Ich habe versucht, es einfach zu machen, die Einstellung des authentifizierten Proxys auf Jupyter zu ändern
Ich habe versucht, die String-Operationen von Python zusammenzufassen
[Python] Ich habe versucht, mit tkinter eine Anwendung zu erstellen, die das Gehalt anhand der Arbeitszeit berechnet
Ich habe versucht, eine RESTful-API zu erstellen, indem ich die explosive Fast-API des Python-Frameworks mit MySQL verbunden habe.
Ich habe versucht, das Masami-Broadcast-Video wie IPPON Grand Prix (OpenCV: Python-Version) zu machen.
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe verschiedene Methoden ausprobiert, um japanische Post mit Python zu senden
Ich habe versucht, mit Python eine E-Mail von Amazon SES zu senden
Code zum Senden von E-Mails basierend auf der Excel-E-Mail-Liste
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Python-Anfänger versuchte, bei einem IT-Unternehmen zu praktizieren
Ich habe versucht, eine Site zu erstellen, mit der die aktualisierten Informationen von Azure einfach angezeigt werden können