1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Gmailでネタメールを一斉送信

Posted at

#動機
ラジオでネタ投稿を本格的にやろうと決意した。
採用数を上げるにはたくさんの投稿をするのは必須、いっぱい送らないと。
そんな中思ったのが、メールがめんどくさい。
基本的にネタはメールで投稿。1通につき1ネタ。10個のネタ送るのに10通のメール・・・。
ということで、一括でネタメールを一斉送信するものを作ろうと思った次第。

#準備

  1. 自動送信をするアカウントの「Googleシート」と「Googleドライブ」のAPIを有効化し、JSONファイルを入手する
  2. JSONファイルを Renameする。
  3. コードを書くファイルを作成する。
  4. jsonをファイルを同じフォルダに格納する

#スプレッドシート
使うsheetは2つで、sheet名は「Index」、「Main」としました。内容は次の通り。
・Index:カウントのメールアドレスとパスワード、送信先、送信元、ラジオネーム、住所、名前
・Main:件名、ネタ、作成日、送信日、状態、結果

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

#ライブラリインストール

$ 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に関して勉強不足なもんで、数時間詰まってしまいました。

##参考
https://qiita.com/njn0te/items/4318347f8c4ed5137476

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?