Senden Sie Google Mail am Ende des Vorgangs [Python]

Dieses Mal habe ich vor einiger Zeit gelernt, wie man Google Mail mit Python verwendet, daher möchte ich es zusammenfassen. Dann habe ich ein Shell-Skript erstellt, das den Befehl ausführt und das Ergebnis per Google Mail sendet, damit ich es vorstellen kann.

Referenz:

Basis: unoh.github.com von unoh: Was willst du tun:Überwachen Sie den Prozess mit Python und senden Sie eine E-Mail mit Google Mail, wenn Sie fertig sind|Sekai Lab: Informationen zum Senden von Bildern: Linux selbst lernen: So senden Sie E-Mails über Google Mail mit Python-Skript: In Bezug auf SMTP: Programming und Keio Kommunikation: Senden und Empfangen von Google Mail mit Python: Umgang mit Japanisch: Ich habe verschiedene Möglichkeiten ausprobiert, um japanische Post mit Python zu senden - Qiita:

Senden Sie Google Mail mit Python

Zuerst habe ich den Code, auf den ich verwiesen habe, kopiert und eingefügt und versucht zu sehen, ob er funktioniert, aber er hat funktioniert. Alles, was Sie jetzt tun müssen, ist es anzupassen, um die Verwendung zu vereinfachen, wenn Sie es von außen anrufen. In Anbetracht des Problems der japanischen Codierung und Sicherheit haben wir es außerdem verbessert, indem wir auf einige Websites verwiesen haben.

Ich habe gerade die guten Punkte aufgegriffen, werde sie aber vorerst veröffentlichen.

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='Standardziel',
                        help='To address')
    parser.add_argument('-s', '--subject', dest='subject', type=str,
                        default='Standardtitel', 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 = "Google Mail-Adresse des Absenders"
    sender_name=u'Quellenname'
    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)

Die Versionsprüfung in der ersten Hälfte kann so notwendig sein, um in anderen Umgebungen zu arbeiten (Entschuldigung für das Kopieren). Die Verwendung von Argparse scheint die Handhabung von Optionen zu vereinfachen, daher habe ich es dieses Mal eingeführt.

Übrigens, wenn Sie argparse verwenden, ist es einfach, Hilfe anzuzeigen,

Selection_008.png

Es wird angezeigt als.

Davon abgesehen sind die grundlegenden Teile fast die gleichen wie die der referenzierten Site. SSL scheint in Bezug auf die Sicherheit besser zu sein als TLS. Ich denke auch, dass es schwierig ist, das Passwort des Google-Kontos direkt zu schreiben. Wenn ich es also direkt ausführe, akzeptiere ich die Eingabe von der Tastatur und verwende getpass, damit der eingegebene Inhalt nicht angezeigt wird.

Warten Sie auf das Ende des Vorgangs und benachrichtigen Sie per E-Mail

Der Grund, warum ich eine E-Mail von Python senden wollte, war, dass ich den Computer im Labor die zeitaufwändigen Berechnungen durchführen lassen und die Ergebnisse erhalten wollte, wenn ich nach Hause kam. Warum? Was für eine coole Sache!

Dieses Mal werde ich diesen Teil mit einem Shell-Skript schreiben. Grundsätzlich zielt es auf Python-Skripte ab, aber angesichts der Vielseitigkeit wird der Befehl selbst als Argument angegeben.

Klicken Sie hier für den 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 /Pfad zum Skript/sendGmail.py -t "Ziel-E-Mail-Adresse" -s "${subject}" -b "${result}"

echo "${result}"

exit 0

Als Ergebnis

sh psWatchMail.sh "Befehl zum Ausführen"

Durch Angabe des Befehls wird beim Beenden des Befehls das im Skript angegebene Ziel angegeben

Befehl "Befehl" zum Ausführen von "erledigt"

Sie können eine E-Mail mit der Standardausgabe als Text senden. Zuerst dachte ich über eine Methode nach, um zu beurteilen, ob der Prozess am Leben ist, indem ich PID usw. spezifizierte, und ich untersuchte in diese Richtung, aber diese Methode ist einfacher und verständlicher, deshalb entschied ich mich für diese Methode. tat. In beiden Fällen besteht der Nachteil darin, dass Sie keine E-Mails senden können, bis der Vorgang vollständig abgeschlossen ist, was mit den bisher durchgeführten GUI-Simulationen nicht kompatibel ist. Wenn es einen Teil gibt, von dem bekannt ist, dass er von Anfang an Zeit benötigt, können Sie beim Aufrufen von sendGmail.py im Python-Skript jederzeit E-Mails senden. Das ist also in Ordnung. Wahrscheinlich. Alternativ können Sie die CPU-Auslastungsrate überwachen und feststellen, dass sie beendet wurde, wenn sie einen bestimmten Schwellenwert unterschreitet. Ich werde viel darüber nachdenken.

Ein Ausführungsbeispiel ist

Selection_009.png

Es sieht aus wie. Auch von der Google Mail-Seite

Selection_010.png

Und Sie können sehen, dass die E-Mail gesendet wurde.

Zusammenfassung

Ich habe zusammengefasst, wie Google Mail mit Python verwendet wird. Dies kann jedoch nicht nur von Google Mail, sondern auch von anderen E-Mail-Clients gesendet werden. In diesem Fall können Sie die Mail-Server-Adresse und die Portnummer ändern. In meinem Fall erstelle ich tatsächlich eine Version des Postkontos der Universität und tippe manchmal E-Mails vom Terminal aus ein. Es ist subtil, wenn man fragt, ob es zweckmäßig ist. Ich denke jedoch, dass es für Leute geeignet ist, die frustriert sind, weil sie eine schwere Site wie die Login-Authentifizierung einzeln öffnen müssen. (Ich denke, ich bin wie eine kleine Person!) Wie auch immer, jetzt kann ich sowohl zu Hause als auch im Labor spielen. Ich habe keine Angst mehr vor schweren Berechnungen!

Recommended Posts

Senden Sie Google Mail am Ende des Vorgangs [Python]
Python-Grundkurs (Ende 15)
Entfernen Sie eine bestimmte Zeichenfolge am Ende von Python
Legen Sie den Prozessnamen des Python-Programms fest
der Zen von Python
Zum Zeitpunkt des Python-Updates mit Ubuntu
Senden Sie Google Mail in Python
python> print> Wird es erst am Ende des Prozesses umgeleitet?> Mit -u ausführen
Der Prozess der Installation von Atom und der Ausführung von Python
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Aufgaben zu Beginn eines neuen Python-Projekts
Auf dem Weg zum Ruhestand von Python2
Über die Funktionen von Python
Die Kraft der Pandas: Python
Senden Sie mit Python mit Google Mail
Dekorateur, der am Ende der Methode "FIN-Methodenname" anzeigt
Anhängen an den Python-Prozess des SSH-Ziels und Debuggen
Der Prozess, Python-Code objektorientiert zu machen und zu verbessern
Wie man einen bestimmten Prozess am Anfang und Ende der Spinne mit Scrapy einfügt
Die Geschichte von Python und die Geschichte von NaN
Erster Python 3 ~ Der Beginn der Wiederholung ~
Existenz aus Sicht von Python
pyenv-change die Python-Version von virtualenv
Verarbeiten Sie das Ergebnis von% time,% timeit
[Python] Die potenzielle Feldplanung von Python Robotics verstehen
Überprüfung der Grundlagen von Python (FizzBuzz)
Informationen zur Grundlagenliste der Python-Grundlagen
[Python] API zum Senden von Google Mail erstellen
Senden Sie E-Mails über Google Mail mit Python 3.4.3.
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
Ich möchte die Effizienz mit Python auch im experimentellen System verbessern. (5) Ich möchte am Ende des Experiments eine Benachrichtigung mit der Slack-API senden
Ändern Sie die Länge der Python-CSV-Zeichenfolgen
Überprüfen Sie das Verhalten des Zerstörers in Python
Was ist die XX-Datei im Stammverzeichnis eines beliebten Python-Projekts?
[Python3] Verstehe die Grundlagen von Beautiful Soup
Übergeben Sie den Pfad des importierten Python-Moduls
Senden Sie Newsletter auf einmal mit Google Mail
Implementieren Sie einen Teil des Prozesses in C ++
Notizen vom Anfang von Python 1 lernen
Überprüfen Sie die Existenz der Datei mit Python
Informationen zur virtuellen Umgebung von Python Version 3.7
Ruf Hallo, Reiwa! Am Anfang von Reiwa!
Wo ist der Python-Instanziierungsprozess geschrieben?
[Python3] Schreiben Sie das Codeobjekt der Funktion neu
Veröffentlichen Sie das Thema Google Mail auf Twitter
Ich kannte die Grundlagen von Python nicht
Das Ergebnis der Installation von Python auf Anaconda
[Python] Probieren Sie pydash der Python-Version von lodash aus
[Python] Überprüfen Sie den Speicherverbrauch von Variablen
Überprüfen Sie den Pfad des importierten Python-Moduls
Die Geschichte der Manipulation globaler Python-Variablen
[Python] [Meta] Ist der Python-Typ ein Typ?
Rufen Sie den Python-Debugger jederzeit auf
Grundlagen zum Ausführen von NoxPlayer in Python
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Die Python-Projektvorlage, an die ich denke.