eyecatch
Sun, Oct 25, 2015

任意の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.