Sun, Oct 25, 2015

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

任意の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はこちらに置いとくので是非使ってみてください。

multiple_mail_sender/GitHub

拡張機能とか大歓迎ですのでプルリクとか投げてやってください。

それでは!