J'ai décidé de l'automatiser car il est difficile d'envoyer des courriels régulièrement.
Pour l'automatisation, nous avons décidé d'en créer un qui répond aux exigences suivantes.
J'ai donc décidé de créer un outil en Python qui répond aux exigences ci-dessus.
Tout d'abord, j'ai examiné si les trois exigences ci-dessus étaient réellement réalisées.
J'ai découvert qu'imaplib, un package pour l'envoi d'e-mails avec Python, peut également joindre des fichiers, j'ai donc décidé de l'utiliser.
Après avoir également étudié cela, j'ai trouvé qu'il existe un package appelé PyDrive qui gère Google Drive à partir de Python, j'ai donc décidé de l'utiliser. Python est trop pratique. ..
J'ai pensé à la légère que Python serait un package qui pourrait facilement connecter / déconnecter le Wi-Fi, mais malheureusement je ne l'ai pas trouvé.
Cependant, j'ai trouvé que PowserShell facilite l'utilisation du Wi-Fi et que les scripts PowerShell peuvent également être facilement appelés du côté Python, j'ai donc décidé d'effectuer une opération Wi-Fi avec PowerShell.
Placez le script Python et le script PowerShell créés à l'endroit approprié, placez le raccourci .py sur le bureau et appuyez dessus pour exécuter l'envoi automatique de courrier. Pour référence, les résultats de la mise en œuvre sont les suivants.
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
#Connectez-vous au wifi/Déconnecter
def wifi(mode):
if mode == 'connect': #Connectez-vous au wifi du SSID spécifié (le SSID lui-même est défini dans PowerShell)
os.system('powershell -Command' + ' ' + \
'powershell -ExecutionPolicy RemoteSigned .\\wifi_on.ps1')
time.sleep(5)
elif mode == 'disconnect': #Se déconnecter du wifi connecté
os.system('powershell -Command' + ' ' + \
'powershell -ExecutionPolicy RemoteSigned .\\wifi_off.ps1')
#Téléchargez le fichier que vous souhaitez joindre au courrier sortant sur Google Drive
def up_file_on_drive():
print('Je télécharge un fichier sur Google Drive.')
#Définissez le chemin et le nom du fichier où se trouve le fichier à télécharger
tgtfolder = 'Chemin du fichier (sans le nom du fichier)'
tgtfile = 'Le nom du fichier que vous souhaitez télécharger'
dlttgt = 'title = ' + '"' + tgtfile + '"' #Utilisé pour obtenir l'ID de fichier
#Processus d'authentification pour l'utilisation de l'API Google Drive
gauth = GoogleAuth()
drive = GoogleDrive(gauth)
#Si un fichier du même nom est déjà stocké, supprimez-le
file_id = drive.ListFile({'q': dlttgt}).GetList()[0]['id']
f = drive.CreateFile({'id': file_id})
f.Delete()
time.sleep(3)
#Téléverser un fichier
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('Le téléchargement du fichier est terminé.')
#Envoyer un e-mail avec des pièces jointes
def send_mail_with_file():
st = get_mail_settings() #Obtenez le contenu du courrier envoyé
#Définir le contenu de l'e-mail à envoyer
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']))
#Pièce jointe
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)
#Envoyer un e-mail
smtpobj = smtplib.SMTP_SSL('smtp.gmail.com', 465, timeout=10) #Spécifiez le numéro de port du serveur SMTP de Gmail
smtpobj.login(st['from_addr'], st['mypass'])
smtpobj.send_message(msg=msg)
smtpobj.close()
#Obtenir les paramètres de messagerie
def get_mail_settings():
info = {
'charset': 'iso-2022-jp',
'send_name': u'Nom de l'expéditeur',
'from_addr': 'L'adresse de l'expéditeur',
'mypass': 'Mot de passe du compte Gmail',
'bcc_addr': 'Destination 1,Destination 2',
'to_addr': 'Destination 1,Destination 2',
'subject': 'Sujet du courriel' + get_today(),
'body': 'le contenu de l'e-mail',
'file': 'Chemin du fichier que vous souhaitez joindre+nom de fichier'
}
return info
#Vérifiez si l'e-mail a été envoyé
def confirm_mail_sent():
print('J'envoie un email.')
st = get_mail_settings() #Obtenez le contenu du courrier envoyé
tgtac = imaplib.IMAP4_SSL('imap.gmail.com', 993) #gmail Nom d'hôte du serveur de courrier entrant (IMAP) et numéro de port de réception du courrier utilisant SSL
tgtac.login(st['from_addr'], st['mypass'])
waitsec = 10 #Délai d'expiration de la logique de confirmation de la transmission du courrier[sec]
#Vérifiez à partir du dernier courrier toutes les secondes pour voir si le courrier envoyé automatiquement est reçu
for i in range(waitsec, 0, -1):
lamtitle = get_latest_mail_title(tgtac) #Obtenez l'objet du dernier e-mail
time.sleep(1) #1 boucle 1 seconde
if lamtitle == st['subject']: #Si l'objet du dernier e-mail est celui d'un e-mail envoyé automatiquement
print('\n La transmission automatique du courrier est terminée.\n')
return
#Si le délai de confirmation expire
print('\n Échec de l'envoi automatique du courrier.\n')
#Obtenez l'objet du dernier e-mail
def get_latest_mail_title(mail):
mail.select('inbox') #Sélection de la boîte aux lettres
data = mail.search(None, 'ALL')[1] #Récupérez toutes les données de votre boîte mail
tgt = data[0].split()[-1] #Recevez la dernière commande par correspondance
x = mail.fetch(tgt, 'RFC822')[1] #Obtenir des informations par e-mail (spécifier une norme pouvant être lue par Gmail)
ms = email.message_from_string(x[0][1].decode('iso-2022-jp')) #Perspective et obtenir
sb = email.header.decode_header(ms.get('Subject'))
ms_code = sb[0][1] #Acquisition de code de caractère
#Obtenez uniquement l'objet du dernier e-mail
if ms_code != None:
mtitle = sb[0][0].decode(ms_code)
else:
mtitle = sb[0][0]
return mtitle
#Obtenez la date du jour
def get_today():
now = datetime.date.today()
tdy = str(now.year) + '/' + str(now.month) + '/' + str(now.day) #Affichage par date
wknum = now.weekday() #Obtenez le numéro du jour du jour (0:Mois... 6:Journée)
wk = get_now_weekday(wknum) #Obtenez le jour d'aujourd'hui
return tdy + '(' + wk + ')'
#Obtenez le jour d'aujourd'hui
def get_now_weekday(key):
wkdict = {0: 'Mois', 1: 'Feu', 2: 'eau', 3: 'bois', 4: 'Argent', 5: 'sol', 6: 'journée'}
return (wkdict[key])
if __name__ == '__main__':
wifi('connect') # 1.Connectez le wifi avec le SSID spécifié
up_file_on_drive() # 2.Téléchargez le fichier que vous souhaitez joindre à Google Drive
send_mail_with_file() # 3.Envoyer un e-mail avec un fichier en pièce jointe
confirm_mail_sent() # 4.Vérifiez si l'e-mail envoyé par GAS est bien arrivé
wifi('disconnect') # 5.Connectez le wifi avec le SSID spécifié
os.system('PAUSE') #Arrêtez la console
2-1. Lors de la connexion
wifi_on.ps1
netsh wlan connect name="Wi-fi que vous souhaitez connecter-SSID Fi"
2-2. Lors de la déconnexion
wifi_off.ps1
netsh wlan disconnect
Écrivez ce qui suit en .m à l'aide de la fonction système.
system('Envie de courir.chemin py')
En particulier, j'étais redevable aux sites suivants. Merci beaucoup.
Contenu | Lier la destination |
---|---|
Télécharger des fichiers sur Google Drive avec PyDrive | https://note.nkmk.me/python-pydrive-download-upload-delete/ https://qiita.com/akabei/items/f25e4f79dd7c2f754f0e |
Script PowerShell de Python (.ps1) appel | https://tkstock.site/2019/10/07/python-powershell-shellscript-activate/ |
Connexion / déconnexion au wifi par PowerShell | https://qiita.com/mindwood/items/22e0895473578c4e0c7e http://wgg.hatenablog.jp/entry/20161111/1478846489 |
Supprimer des fichiers sur Google Drive | https://note.nkmk.me/python-pydrive-download-upload-delete/ |
Obtenez des informations sur les e-mails entrants Gmail avec imaplib | https://py.minitukuc.com/2017/11/07/gmailhonbun/ |
Masquer la fenêtre racine lors de l'utilisation de la boîte de dialogue Tkinter | https://stackoverflow.com/questions/1406145/how-do-i-get-rid-of-python-tkinter-root-window |
Envoyer Gmail avec Python | https://qiita.com/nakasuke_/items/607cf74d8841f76e59c6 |
Joindre un fichier lors de l'envoi de Gmail avec Python | https://time-space.kddi.com/ict-keywords/kaisetsu/20170824/2081 |
Définissez le nom de l'expéditeur lors de l'envoi de Gmail en Python | https://teratail.com/questions/128993 |
Nous apprécions vos suggestions, suggestions d'amélioration et suggestions d'erreurs. Je suis content si tu peux le faire.