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.
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.
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.
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. ..
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.
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.
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
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
Schreiben Sie mit der Systemfunktion Folgendes in .m.
system('Willst du rennen.py Pfad')
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 |
Wir freuen uns über Ihre Vorschläge, Verbesserungsvorschläge und Fehlervorschläge. Ich bin froh, wenn du es schaffst.