Cette fois, j'ai appris à utiliser Gmail avec Python il y a quelque temps, alors j'aimerais le résumer. Ensuite, j'ai créé un script shell qui exécute la commande et envoie le résultat par Gmail, je vais donc le présenter.
référence:
Base: unoh.github.com par unoh: Que veux-tu faire:Surveillez le processus avec Python et envoyez un e-mail à l'aide de gmail lorsque vous avez terminé|Laboratoire Sekai: À propos de l'envoi d'images: Auto-apprentissage Linux: Comment envoyer des e-mails via Gmail avec un script Python: Concernant SMTP: Programmation et Keio Communication: Envoi et réception de Gmail avec Python: Comment gérer le japonais: J'ai essayé différentes manières d'envoyer du courrier japonais avec Python - Qiita:
Tout d'abord, j'ai copié et collé le code auquel je faisais référence et j'ai essayé de voir si cela fonctionnait, mais cela a fonctionné. Tout ce que vous avez à faire maintenant est de le personnaliser pour une utilisation facile lorsque vous l'appelez de l'extérieur. De plus, compte tenu du problème de l'encodage et de la sécurité japonais, nous l'avons amélioré en faisant référence à certains sites.
Je viens de ramasser les bons points, mais je le posterai pour le moment.
sendGmail.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
from platform import python_version
import argparse
import getpass
import codecs
release = python_version()
if release > '2.6.2':
from smtplib import SMTP_SSL
else:
SMTP_SSL = None
def create_message(from_addr, sender_name, to_addr, subject, body, encoding):
msg = MIMEText(body, 'plain', encoding)
msg['Subject'] = Header(subject, encoding)
form_jp = u"%s <%s>" % (str(Header(sender_name, encoding)), from_addr)
msg['From'] = from_addr
msg['To'] = to_addr
msg['Date'] = formatdate()
return msg
def send_via_gmail(from_addr, to_addr, passwd, msg):
if SMTP_SSL:
print "send via SSL..."
s = SMTP_SSL('smtp.gmail.com', 465)
s.login(from_addr, passwd)
s.sendmail(from_addr, [to_addr], msg.as_string())
s.close()
print 'mail sent!'
else:
print "send via TLS..."
s = smtplib.SMTP('smtp.gmail.com', 587)
if release < '2.6':
s.ehlo()
s.starttls()
if release < '2.5':
s.ehlo()
s.login(from_addr, passwd)
s.sendmail(from_addr, [to_addr], msg.as_string())
s.close()
print "mail sent!"
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Send Gmail.')
parser.add_argument('-t', '--to', dest='to_addr', type=str,
default='Destination par défaut',
help='To address')
parser.add_argument('-s', '--subject', dest='subject', type=str,
default='Titre par défaut', help='Title')
parser.add_argument('-b', '--body', dest='body', type=str,
default='no message', help='Body of the mail.')
args = parser.parse_args()
from_addr = "Adresse Gmail de l'expéditeur"
sender_name=u'Nom de la source'
print "from: %s <%s>" % (sender_name, from_addr)
passwd = getpass.getpass()
to_addr = args.to_addr
title = args.subject
body = args.body
msg = create_message(from_addr, sender_name, to_addr, title, body, 'utf-8')
send_via_gmail(from_addr, to_addr, passwd, msg)
La vérification de version dans la première moitié peut être tellement nécessaire pour travailler dans d'autres environnements (désolé pour la copie). L'utilisation d'argparse semble faciliter la gestion des options, je l'ai donc présentée cette fois.
Au fait, si vous utilisez argparse, il est facile d'afficher l'aide,
Il sera affiché sous la forme.
A part cela, les éléments de base sont quasiment les mêmes que ceux du site référencé. SSL semble être meilleur en termes de sécurité que TLS. De plus, je pense qu'il est difficile d'écrire directement le mot de passe du compte Google, donc lorsque je l'exécute directement, j'accepte l'entrée du clavier et j'utilise getpass pour que le contenu saisi ne s'affiche pas.
La raison pour laquelle j'ai voulu envoyer un e-mail de Python était parce que je voulais laisser l'ordinateur du laboratoire faire les calculs chronophages et recevoir les résultats une fois rentré chez moi. Pourquoi? Quelle chose cool!
Donc, cette fois, j'écrirai cette partie avec un script shell. Fondamentalement, elle cible les scripts Python, mais compte tenu de la polyvalence, la commande elle-même est donnée en argument.
Cliquez-ici pour le code.
psWatchMail.sh
if [ $# = 0 ]; then
echo "need argument 'COMMAND'" 1>&2
exit 0
else
COMMAND=$1
fi
subject="command \"${COMMAND}\" done"
result=`${COMMAND}`
wait
sleep 1
python /Chemin vers le script/sendGmail.py -t "Adresse e-mail de destination" -s "${subject}" -b "${result}"
echo "${result}"
exit 0
Par conséquent
sh psWatchMail.sh "Commande à exécuter"
En spécifiant la commande, lorsque la commande se termine, la destination spécifiée dans le script
Commande "Command" pour exécuter "done"
Vous pouvez envoyer un e-mail avec la sortie standard comme corps. Au début, j'ai pensé à une méthode pour juger si le processus est vivant en spécifiant PID etc., et j'enquêtais dans cette direction, mais cette méthode est plus simple et plus facile à comprendre, j'ai donc décidé d'utiliser cette méthode. fait. Dans les deux cas, l'inconvénient est que vous ne pouvez pas envoyer d'e-mails tant que le processus n'est pas complètement terminé, ce qui est incompatible avec les simulations d'interface graphique que vous avez effectuées jusqu'à présent. Eh bien, s'il y a une partie qui est connue pour prendre du temps depuis le début, si vous appelez sendGmail.py dans le script Python, vous pouvez envoyer du courrier à tout moment, donc c'est très bien. Probablement. Vous pouvez également surveiller le taux d'utilisation du processeur et déterminer qu'il s'est terminé lorsqu'il tombe en dessous d'un certain seuil. J'y penserai beaucoup.
Un exemple d'exécution est
On dirait. Aussi du côté de Gmail
Et vous pouvez voir que l'e-mail a été envoyé.
J'ai résumé comment utiliser Gmail avec Python. Cependant, cela peut être envoyé non seulement depuis Gmail, mais également depuis d'autres clients de messagerie. Dans ce cas, vous pouvez modifier l'adresse du serveur de messagerie et le numéro de port. Dans mon cas, je crée en fait une version du compte de messagerie de l'université, et parfois je tape du courrier depuis le terminal. Il est subtil lorsqu'on lui demande si c'est pratique. Cependant, je pense que cela convient aux personnes frustrées car elles doivent ouvrir un site lourd comme l'authentification de connexion à chaque fois. (Je pense que je suis comme une petite personne!) De toute façon, maintenant je peux jouer à la fois à la maison et au laboratoire. Je n'ai plus peur des calculs lourds!
Recommended Posts