個々の宛先のメアドと宛先毎の文面を格納したリストを使ってメールを自動送信するプログラムを作りました.
動機は,講義の際にGoogle formを使って収集した質問やコメントに対して,一人ひとりに返答してあげたいなと思ったので.
質問を収集する際にメアドと名前を入力してもらってるので,それをGoogle formからCSVで落として,表計算ソフト上で返答を作成.
以下のようなCSVファイルにしました.
なお,名前については,あらかじめ苗字と下の名前を表計算ソフトで切り分けてます.
メアド(row[0]) | 名前(row[1]) | 質問文(row[2]) | 返答文(row[3]) |
---|---|---|---|
address1 | name1 | comment1 | response1 |
address2 | name2 | question2 | response2 |
・・・ | ・・・ | ・・・ | ・・・ |
このCSVファイルを一行ずつ読み込んで,メールを作ってgmailで送信していきます.
パスワードやメアドをべた書きするプログラムなので,セキュリティ的には最悪ですが
まあ,個人的に利用する分にはよいのではと思います.
SendMailbyCSV.py
import smtplib
import csv
from email.mime.text import MIMEText
from email.utils import formatdate
FROM_ADDRESS = '***********@gmail.com' #ここにメアド
MY_PASSWORD = '************' #ここにパスワード
def create_message(from_addr, to_CC, to_addr, subject, body):
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = from_addr
msg['CC'] = to_CC
msg['To'] = to_addr
msg['Date'] = formatdate()
return msg
def send(from_addr, to_addrs, msg):
smtpobj = smtplib.SMTP('smtp.gmail.com', 587)
smtpobj.ehlo()
smtpobj.starttls()
smtpobj.ehlo()
smtpobj.login(FROM_ADDRESS, MY_PASSWORD)
smtpobj.sendmail(from_addr, to_addrs, msg.as_string())
smtpobj.close()
if __name__ == '__main__':
csv_file = open("./response.csv","r", encoding="ms932", errors="", newline="" )
f = csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)
header = next(f)
for row in f:
to_addr = row[0] # メアド
subject = '〇月〇日の講義での質問・コメントへの返答'
body = row[1] + "さん\n"\
"\n"\
"\n"\
"こんにちは、経済学部の藤野です。\n"\
"\n"\
"〇月〇日の講義では質問・コメントの入力ありがとうございます.\n"\
"入力された質問・コメントについて、以下の通りに返答しますね。\n"\
"\n"\
"<入力内容>\n"\
+ row[2] +"\n"\
"\n"\
"<返答>\n"\
+ row[3] + "\n"\
"\n"\
"拝\n"\
msg = create_message(FROM_ADDRESS, "******@******", to_addr, subject, body) #2つ目の引数で大学の公式アドレスをCCに入れておく.
print(body) #確認のため,メール送信内容を画面表示させる.
send(FROM_ADDRESS, to_addr, msg)