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:
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,
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.
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
Es sieht aus wie. Auch von der Google Mail-Seite
Und Sie können sehen, dass die E-Mail gesendet wurde.
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