Senden Sie E-Mails mit Python an eine bestimmte E-Mail-Adresse, ohne SMTP festzulegen

Hintergrund

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.

Umgebung

OS : Ubuntu16.04 python : version3.5

Schritt 1) Vorbereitung für die Verwendung der Gmai-API

(1) Installieren Sie das Google Mail-API-Paket für Python </ b>

pip3 install --upgrade google-api-python-client

(2) Authentifizieren Sie sich mit der API auf der Google Mail-Seite </ b>

Die Authentifizierung sollte gemäß Schritt 1 auf der Seite hier erfolgen.

Schritt 2) Schreiben Sie den Programmcode zum Senden von Google Mail

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.

  • CLIENT_SECRET_FILE: Pfad der Authentifizierungs-JSON-Datei, die von der GMAIL-Site in STEP1 heruntergeladen wurde
  • APPLICATION_NAME: Ein beliebiger Anwendungsname. Alles ist gut.
  • MAIL_FROM: Absendername. Dies ist die Adresse des Kontos, das Sie in Schritt 1 angemeldet haben.
  • MAIL_TO: Ziel. Durch Trennen durch Kommas können mehrere Einstellungen vorgenommen werden.

Recommended Posts