1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Excelのメールリストを元にメールを送るコード

Last updated at Posted at 2020-09-11

なぜこんなものを?

業務(業務以外でも飲み会の出欠とか)で星取り表を作って、それに基づいてまだ未提出の人に催促を行うような、いわゆる雑務はかなりあります。そこでPythonで処理することにしました。ぶっちゃけMicrosoft Office365を使っているような企業ならAutomate Flowを使えばこんなのノーコードでできそうですが、身の回りで使える環境がないためちゃちゃっと用意しました。

参考にしたもの

  • 退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (2017/6/3)Al Sweigart(著), 相川 愛三 (翻訳)

用意するもの

下のような「maillist.xlsx」 というファイルを用意します。
コメント 2020-09-11 144102.png

mail_send.py
import openpyxl, smtplib
from email import message

wb = openpyxl.load_workbook('maillist.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
lastCol = sheet.max_column
latest_month = sheet.cell(row=1, column=lastCol).value

# Excelファイルの確認
unpaid_Members = {}
for r in range(2,sheet.max_row + 1):
    payment = sheet.cell(row=r, column=lastCol).value
    if payment != 'paid':
        name = sheet.cell(row=r, column=1).value
        email = sheet.cell(row=r, column=2).value
        unpaid_Members[name] = email

# メールアカウントにログインする

smtp_host = 'smtp-mail.outlook.com'
smtp_port = 587
send_name = 'Master'
from_email ='master@outlook.jp'
username = 'master@outlook.jp'
password = 'password'

smtp_obj = smtplib.SMTP(smtp_host, smtp_port)
smtp_obj.ehlo()
smtp_obj.starttls()
smtp_obj.login(username,password)

# コマンドラインの画面でユーザにパスワードの入力を要求して
# 入力したいときにはsysパッケージをインポートして下のコードを実行。
# smtp_obj.login(username,sys.argv[1])

# メールを送信する
for name, email in unpaid_Members.items():
    msg = message.EmailMessage()
    msg.set_content("""
{}様
お疲れさまです。
まだ来週の歓迎会の参加費未払いのようです。
確認をお願いします。
    """.format(name))
    msg['From'] = '{}<{}>'.format(send_name, from_email)
    msg['Subject'] = '{}の支払い分に関しまして'.format(latest_month)    
    print('メールを送信しています {}...' .format(email))
    sendmail_Status = smtp_obj.sendmail(from_email, email, msg.as_string())
if sendmail_Status != {}:
    print('{}へメール送信中に問題が起こりました: {}'.format(email,sendmail_Status))
smtp_obj.quit()

使い方

後はこの.pyファイルを実行するだけです。タイムスケジュールを設定して実行することで毎日自動で飲み会の料金建替え徴収を未支払いの人に対して催促することができます。よいメールライフを。

1
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?