任意のGmailアカウントから大量のメールを送るスクリプトをPythonで書いてみた

イベントの参加者にリマインドを送るときに少し大変だったのでスクリプト書いたときのお話。
イベントの予約内容によってコンテントが少し変わるところがめんどくさかった。
まず、GmailのSMTPサーバにsmtplibを使ってログインできるらしいので、その機能を使ってメールを送信する。
その辺の実装は、この辺を見ながらやってみたら上手くいった。とりあえず、添付ファイルとかは基本的になかったので、MIMEとかは後回し。 今後需要があれば考慮していく感じで。
メールの内容については、こんな感じのcsvファイルを作成して、予約内容毎にBoolean
でcontentsを指定するようにした。
id,name,name_kana,mail,company,1,2,3,4,5
1,A,a,a@mit.edu,A Company,TRUE,FALSE,FALSE,FALSE,FALSE
2,B,b,b@mit.edu,B Company,FALSE,TRUE,FALSE,FALSE,FALSE
3,C,c,c@mit.edu,C Company,FALSE,FALSE,TRUE,FALSE,FALSE
4,D,d,d@mit.edu,D Company,FALSE,FALSE,FALSE,TRUE,FALSE
5,E,e,e@mit.edu,E Company,FALSE,FALSE,FALSE,FALSE,TRUE
6,F,f,f@mit.edu,F Company,TRUE,TRUE,FALSE,FALSE,FALSE
7,G,g,g@mit.edu,G Company,FALSE,TRUE,TRUE,FALSE,FALSE
8,H,h,h@mit.edu,H Company,FALSE,FALSE,TRUE,TRUE,FALSE
9,I,i,i@mit.edu,I Company,FALSE,FALSE,FALSE,TRUE,TRUE
10,J,j,j@mit.edu,J Company,TRUE,TRUE,TRUE,TRUE,TRUE
contents_text
はpythonスクリプト内で定義しておく。
## initialize contents
contents_text = {'1': "content A",
'2': "content B",
'3': "content C",
'4': "content D",
'5': "content E"}
こうすることで、csvファイルに基づいてメールを送信する機能が実装出来る。
内容を確認せずに送信できてしまうのもどうかと思ったので、dry-run
機能も実装済み。
$ python generate_txt.py --dry-run True
------------------------------Message ID: 1------------------------------
To: a@mit.edu
Title: test subject
------------------------------------------------------------
Message:
Dear A, A Company
Thank you for registering our event, tomorrow.
This is a reminder to everyone about the upcoming conference call, this Friday.
The deail of the event are shown in the following url.
[EVENT DETAIL]
http://tstomoki.github.io/
[NOTES]
1: content A
--
tstomoki
Web : http://tstomoki.github.io/
Mail : tstomoki4@gmail.com
------------------------------------------------------------
------------------------------Message ID: 2------------------------------
To: b@mit.edu
Title: test subject
------------------------------------------------------------
...
sourceはこちらに置いとくので是非使ってみてください。
拡張機能とか大歓迎ですのでプルリクとか投げてやってください。
それでは!