LoginSignup
2
2

More than 3 years have passed since last update.

宛先と文面のリスト(CSV)からメールを自動送信

Last updated at Posted at 2019-05-06

個々の宛先のメアドと宛先毎の文面を格納したリストを使ってメールを自動送信するプログラムを作りました.
動機は,講義の際に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)

2
2
0

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
2
2