Zuvor schrieb ich einen Artikel Starten Sie automatisch einen Browser unter Ubuntu und beobachten Sie Werte im WEB an festen Punkten. Ich überlegte, eine Warnung per E-Mail zu senden, wenn sich der Wert, den ich überwachte, merklich bewegte, aber es war mühsam, den SMTP-Server von Grund auf neu einzustellen. Beim Nachschlagen habe ich versucht, ein Programm zu erstellen, da es möglich ist, E-Mails zu senden, ohne SMTP vorzubereiten, wenn ich die Google Mail-API verwende.
OS : Ubuntu16.04 python : version3.5
pip3 install --upgrade google-api-python-client
Die Authentifizierung sollte gemäß Schritt 1 auf der Seite hier erfolgen.
Der eigentliche Programmcode wurde von der folgenden Seite fast nachgeahmt. → E-Mail über die Google Mail-API mit Python3 + google-api-python-client senden Es ist sehr leicht verständlich geschrieben.
Der Programmcode wird unten angezeigt. Sie können es in Ihrer eigenen Umgebung verwenden, indem Sie einfach die vier Konstanten (CLIENT_SECRET_FILE, APPLICATION_NAME, MAIL_FROM, MAIL_TO) im Code ändern.
from __future__ import print_function
import httplib2
import os
import apiclient
from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools
import base64
from email.mime.text import MIMEText
from email.utils import formatdate
import traceback
try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None
# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/gmail-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/gmail.send'
CLIENT_SECRET_FILE = '<path_to_credintial>.json'
APPLICATION_NAME = '<application_name>'
MAIL_FROM = "<sender email-address>"
MAIL_TO = "<receiver email-address>"
def get_credentials():
home_dir = os.path.expanduser('~')
credential_dir = os.path.join(home_dir, '.credentials')
if not os.path.exists(credential_dir):
os.makedirs(credential_dir)
credential_path = os.path.join(credential_dir,
'gmail-send-api.json')
store = oauth2client.file.Storage(credential_path)
credentials = store.get()
if not credentials or credentials.invalid:
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
flow.user_agent = APPLICATION_NAME
if flags:
credentials = tools.run_flow(flow, store, flags)
else: # Needed only for compatibility with Python 2.6
credentials = tools.run(flow, store)
print('Storing credentials to ' + credential_path)
return credentials
def create_message(receiver,subject,mail_str):
message = MIMEText(mail_str)
message["from"] = MAIL_FROM
message["to"] = receiver
message["subject"] = subject
message["Date"] = formatdate(localtime=True)
byte_msg = message.as_string().encode(encoding="UTF-8")
byte_msg_b64encoded = base64.urlsafe_b64encode(byte_msg)
str_msg_b64encoded = byte_msg_b64encoded.decode(encoding="UTF-8")
return {"raw": str_msg_b64encoded}
def send_mail(receiver,subject,mail_str):
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('gmail', 'v1', http=http)
try:
result = service.users().messages().send(
userId = MAIL_FROM,
body=create_message(receiver,subject,mail_str)
).execute()
print("Message Id: {}" .format(result["id"]))
except apiclient.errors.HttpError:
print("-----start trace-----")
traceback.print_exc()
print("-----end trace-----")
if __name__ == '__main__':
send_mail("gano_test\ngano_test2")
Geben Sie als Ergänzung für jede der vier Konstanten Folgendes ein.
Recommended Posts