#動機
ラジオでネタ投稿を本格的にやろうと決意した。
採用数を上げるにはたくさんの投稿をするのは必須、いっぱい送らないと。
そんな中思ったのが、メールがめんどくさい。
基本的にネタはメールで投稿。1通につき1ネタ。10個のネタ送るのに10通のメール・・・。
ということで、一括でネタメールを一斉送信するものを作ろうと思った次第。
#準備
- 自動送信をするアカウントの「Googleシート」と「Googleドライブ」のAPIを有効化し、JSONファイルを入手する
- JSONファイルを Renameする。
- コードを書くファイルを作成する。
- jsonをファイルを同じフォルダに格納する
#スプレッドシート
使うsheetは2つで、sheet名は「Index」、「Main」としました。内容は次の通り。
・Index:カウントのメールアドレスとパスワード、送信先、送信元、ラジオネーム、住所、名前
・Main:件名、ネタ、作成日、送信日、状態、結果
#ライブラリインストール
$ pip install gspread oauth2client
#コード
send.py
#メール送信関係
from email.mime.text import MIMEText
from email.utils import formatdate
import smtplib
#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
# 全ての値を、dataという変数に代入しています。
data = sheet2.get_all_records()
# データ数を取得
last_number = len(data)
# pprint(data)
for row in range(last_number):
# 送信判定
status = data[row]["結果"]
if status == "完了":
continue
# メール送信に必要な情報を抽出
body = data[row]["ネタ"]
radioName = "ラジオネーム:" + _radioName
msg = MIMEText(body + "\n\n" + radioName + "\n\n" + _address + "\n\n" + _name)
# sheet更新
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, "送信済み")
sheet2.update_cell(row + 2, 7, "完了")
msg['Subject'] = data[row]["件名"]
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()
#補足
Python2系だと、次のエラーがでます。
Traceback (most recent call last):
File "send.py", line 6, in <module>
import gspread
ModuleNotFoundError: No module named 'gspread'
対応としては3系をインストールすればいいだけなんですが、Pythonに関して勉強不足なもんで、数時間詰まってしまいました。