Sending a CFP to Multiple Email Addresses One-by-one Using Python Script

July 11, 2020 Yuuki Nishiyama 0 Comments

学会の広報に就任すると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も、本会議の論文用だけでなく、ポスター・デモ・併設ワークショップ・参加登録のお知らせ等、メールを送る機会がかなり多いです。簡単なスクリプトを準備しておくとかなり仕事が楽になります。

誰かの助けになれば幸いです。

Leave a Reply:

Your email address will not be published. Required fields are marked *