学会の広報に就任するとCFP等、複数(大きな国際会議になると100以上)のメーリングリストや個人宛にメールを送る必要がある。所属研究機関のオフィシャルなメールアドレスの方が信頼度が上がるので、Pythonスクリプトを使って直接SMTPサーバにアクセスしてメールを送信してみた。Google Spread Sheetでも同じことは実現できるが、一日100件までしか送信できない制約があるので、一日に100件以上送信する場合はこちらがおすすめ。
Pythonのライブラリは、smtplib
を使う。次に (1.) SMTPサーバにログインする。(2.)ログインしたらMIMEText
のインスタンスを生成し、(3)メールを送信する。メールの本文は、cfp.txt
として同じディレクトリに配置する。
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate
import time
def create_message(from_addr, to_addr, subject, body):
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = from_addr
msg['To'] = to_addr
msg['Date'] = formatdate()
return msg
def load_body(file):
f = open(file)
body = f.read()
f.close()
return body
## 1. login
smtpobj = smtplib.SMTP(SERVER, 587)
smtpobj.ehlo()
smtpobj.starttls()
smtpobj.ehlo()
smtpobj.login(USER_NAME, PASSWORD)
subject = "CFP"
from_address = "from_address@sample.coom"
to_address = "to_address@sample.com"
## 2. create a message
body = load_body('cfp.txt')
msg = create_message(from_address, to_address, subject, body)
## 3. send an email
smtpobj.sendmail(from_address, to_address, msg.as_string())
複数のメーリングリストに送信する場合は、CSV形式でアドレスのリストを準備し、pandas
でリストを込めば、あとはfor文で回すだけ。
import pandas as pd
mailing_list = pd.read_csv('mailing_list.csv')
for to_address in mailing_list['address']:
msg = create_message(from_address, to_address, subject, body)
smtpobj.sendmail(from_address, to_address, msg.as_string())
面倒なことは自動化しようと改めて思った。
ちなみに国際学会になると、投稿締め切りの3・2・1ヶ月、2・1週間前ぐらいの頻度でCFPを流すことになります。さらにCFPも、本会議の論文用だけでなく、ポスター・デモ・併設ワークショップ・参加登録のお知らせ等、メールを送る機会がかなり多いです。簡単なスクリプトを準備しておくとかなり仕事が楽になります。
誰かの助けになれば幸いです。
Categories: