[PYTHON] Envoyez des newsletters en une seule fois avec Gmail

Motivation

J'ai décidé de publier l'histoire à la radio pour de bon. Il est essentiel de poster beaucoup pour augmenter le nombre d'embauches, et il faut en envoyer beaucoup. Pendant ce temps, je pensais que l'e-mail était ennuyeux. Fondamentalement, le matériel est publié par courrier électronique. Une histoire pour chaque copie. 10 courriels pour envoyer 10 histoires ... J'ai donc décidé de créer quelque chose qui enverrait toutes les nouvelles en même temps.

Préparation

  1. Activez les API "Google Sheet" et "Google Drive" du compte qui envoie et obtient automatiquement le fichier JSON.
  2. Renommez le fichier JSON.
  3. Créez un fichier pour écrire le code.
  4. Stockez json dans le même dossier

Tableur

J'ai utilisé deux feuilles, et les noms de feuille étaient "Index" et "Main". Le contenu est le suivant. -Index: compte l'adresse e-mail et le mot de passe, la destination, l'expéditeur, le nom de la radio, l'adresse, le nom -Principal: sujet, matière, date de création, date de transmission, statut, résultat

Index スクリーンショット 2020-09-06 17.17.54.png Main スクリーンショット 2020-09-06 17.16.34.png

Installation de la bibliothèque

$ pip install gspread oauth2client

code

send.py


#Relations d'envoi d'e-mails
from email.mime.text import MIMEText
from email.utils import formatdate
import smtplib
#Relation de coopération API
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import datetime
from pprint import pprint 

scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]

creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope)

client = gspread.authorize(creds)

SPREADSHEET_KEY = '******************************************'
sheet1= client.open_by_key(SPREADSHEET_KEY).worksheet('Index')
sheet2= client.open_by_key(SPREADSHEET_KEY).worksheet('Main')

# Index
_id        = sheet1.cell(2,1).value
_pass      = sheet1.cell(2,2).value
_from      = sheet1.cell(4,1).value
_to        = sheet1.cell(4,2).value
_radioName = sheet1.cell(4,3).value
_name      = sheet1.cell(6,1).value
_address   = sheet1.cell(8,1).value

#Toutes les valeurs sont affectées à une variable appelée data.
data = sheet2.get_all_records()

#Obtenez le nombre de données
last_number = len(data)

# pprint(data)

for row in range(last_number):
    #Jugement de transmission
    status = data[row]["résultat"]
    if status == "Terminé":
        continue
    #Extraire les informations nécessaires pour envoyer un email
    body = data[row]["Neta"]
    radioName = "nom de la radio:" + _radioName
    msg = MIMEText(body + "\n\n" + radioName + "\n\n" + _address + "\n\n" + _name)
    #mise à jour de la feuille
    now = datetime.datetime.now()
    sheet2.update_cell(row + 2, 5 , now.strftime("%Y/%m/%d %H:%M:%S.%f"))
    sheet2.update_cell(row + 2, 6, "envoyé")
    sheet2.update_cell(row + 2, 7, "Terminé")

    msg['Subject'] = data[row]["matière"]
    msg['From'] = _from
    msg['To'] = _to
    msg['Date'] = formatdate()

    # pprint(msg)

    smtp = smtplib.SMTP('smtp.gmail.com', 587)
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.login(_id, _pass)
    smtp.send_message(msg)
    smtp.close()

Supplément

Dans la série Python2, l'erreur suivante apparaît.

python


Traceback (most recent call last):
  File "send.py", line 6, in <module>
    import gspread
ModuleNotFoundError: No module named 'gspread'

Tout ce que j'ai à faire est d'installer le 3ème système, mais je n'ai pas beaucoup étudié Python, donc je suis resté bloqué pendant plusieurs heures.

référence

https://qiita.com/njn0te/items/4318347f8c4ed5137476

Recommended Posts

Envoyez des newsletters en une seule fois avec Gmail
Remplacez tout d'un coup par sed
Envoyer en utilisant Python avec Gmail
Envoyez facilement des e-mails avec Gmail avec Django
Envoyer des e-mails via gmail avec Python 3.4.3.
Convertir un mémo à la fois avec Python 2to3
Supprimez tous les e-mails Gmail inutiles avec l'API
Comment enregistrer toutes les photos Instagram à la fois
Effacez les fichiers image à la fois avec un seul support
Envoyer Gmail à la fin du processus [Python]
Mettre à jour plusieurs tables à la fois avec pandas to_sql
Convertissez plusieurs fichiers proto à la fois avec python
Obtenez le numéro d'entreprise à la fois via gbizinfo avec python
Limites qui peuvent être analysées à la fois avec MeCab
Envoyer des e-mails avec Django
Envoyer des e-mails par Python
Envoyer Gmail en Python
[Python] Envoyez un e-mail depuis Gmail avec le paramètre d'authentification en deux étapes
Téléchargez les images du drapeau de Wikipédia en une seule fois [Python] [Beautiful Soup]
Créez plusieurs utilisateurs avec des numéros de série à la fois avec Ansible Playbook