Envoyer Gmail à la fin du processus [Python]

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:

Envoyer Gmail à l'aide de Python

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,

Selection_008.png

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.

Attendez la fin du processus et notifiez-le par e-mail

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

Selection_009.png

On dirait. Aussi du côté de Gmail

Selection_010.png

Et vous pouvez voir que l'e-mail a été envoyé.

Résumé

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

Envoyer Gmail à la fin du processus [Python]
Cours de base Python (à la fin de 15)
Supprimer une chaîne spécifique à la fin de python
Définissez le nom du processus du programme Python
le zen de Python
Au moment de la mise à jour de python avec ubuntu
Envoyer Gmail en Python
python> print> Est-il redirigé uniquement à la fin du processus?> Exécuter avec -u
Le processus d'installation d'Atom et de l'exécution de Python
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Tâches au démarrage d'un nouveau projet python
Vers la retraite de Python2
À propos des fonctionnalités de Python
Le pouvoir des pandas: Python
Envoyer en utilisant Python avec Gmail
Décorateur qui affiche "Nom de la méthode FIN" à la fin de la méthode
Attacher au processus Python de la destination SSH et déboguer
Le processus de création et d'amélioration du code Python orienté objet
Comment insérer un processus spécifique au début et à la fin de l'araignée avec la tremblante
L'histoire de Python et l'histoire de NaN
First Python 3 ~ Le début de la répétition ~
Existence du point de vue de Python
pyenv-changer la version python de virtualenv
Traiter le résultat de% time,% timeit
[Python] Comprendre le potentiel_field_planning de Python Robotics
Revue des bases de Python (FizzBuzz)
À propos de la liste de base des bases de Python
[Python] Créer une API pour envoyer Gmail
Envoyer des e-mails via gmail avec Python 3.4.3.
Apprenez les bases de Python ① Débutants élémentaires
Je souhaite améliorer l'efficacité avec Python même dans le système expérimental (5) Je souhaite envoyer une notification à la fin de l'expérience avec l'API slack
Changer la longueur des chaînes csv Python
Vérifiez le comportement du destroyer en Python
Quel est le fichier XX à la racine d'un projet Python populaire?
[Python3] Comprendre les bases de Beautiful Soup
Passez le chemin du module python importé
Envoyez des newsletters en une seule fois avec Gmail
Implémenter une partie du processus en C ++
Notes d'apprentissage depuis le début de Python 1
Vérifier l'existence du fichier avec python
À propos de l'environnement virtuel de Python version 3.7
Criez Bonjour Reiwa! Au début de Reiwa!
Où est écrit le processus d'instanciation python?
[Python3] Réécrire l'objet code de la fonction
Publier le sujet de Gmail sur Twitter
Je ne connaissais pas les bases de Python
Le résultat de l'installation de python sur Anaconda
[Python] Essayez pydash de la version Python de lodash
[python] Vérifier la consommation de mémoire des variables
Vérifiez le chemin du module importé Python
L'histoire de la manipulation des variables globales Python
[python] [meta] Le type de python est-il un type?
Appelez le débogueur python à tout moment
Principes de base pour exécuter NoxPlayer en Python
Pandas du débutant, par le débutant, pour le débutant [Python]
Le modèle de projet Python auquel je pense.