Envoyer des e-mails à une adresse e-mail spécifique avec python sans paramétrer SMTP

Contexte

Auparavant, j'ai écrit un article Lancer automatiquement un navigateur sur Ubuntu et observer les valeurs sur le WEB aux points fixes. J'ai envisagé d'envoyer une alerte par e-mail s'il y avait un mouvement notable dans la valeur que je surveillais, mais configurer le serveur SMTP à partir de zéro était un problème. Quand je l'ai recherché, j'ai essayé de construire un programme car il est possible d'envoyer du courrier sans préparer SMTP si j'utilise l'API Gmail.

environnement

OS : Ubuntu16.04 python : version3.5

Étape 1) Préparation à l'utilisation de l'API Gmai

(1) Installez le package de l'API Gmail pour python </ b>

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

(2) S'authentifier à l'aide de l'API sur la page Gmail </ b>

L'authentification doit être effectuée conformément à l'étape 1 sur la page here.

Étape 2) Écrivez le code du programme pour envoyer Gmail

Le code du programme réel a été presque imité à partir du site suivant. → Envoyer des e-mails à l'aide de l'API Gmail avec Python3 + google-api-python-client Il est rédigé de manière très simple à comprendre.

Le code du programme est indiqué ci-dessous. Vous pouvez l'utiliser dans votre propre environnement en modifiant simplement les quatre constantes (CLIENT_SECRET_FILE, APPLICATION_NAME, MAIL_FROM, MAIL_TO) dans le code.

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")

En complément, entrez ce qui suit pour chacune des quatre constantes.

  • CLIENT_SECRET_FILE: Chemin du fichier json d'authentification téléchargé depuis le site GMAIL à STEP1
  • APPLICATION_NAME: un nom d'application arbitraire. Tout va bien.
  • MAIL_FROM: nom de l'expéditeur. Il s'agit de l'adresse du compte que vous vous êtes connecté à l'étape 1.
  • MAIL_TO: Destination. Plusieurs paramètres peuvent être définis en les séparant par des virgules.

Recommended Posts