stmtkブログ

Python中心の技術ブログです。

【Python】会費リマインダーメールを送信する

機能

会費リマインダーメールを送信するPythonプログラムです。

会費管理用のExcelから未払いの会員を抽出し、リマインダーメールを送信します。

※メールアドレスはダミーです。

  • リマインダーメール

サンプル動画

youtu.be

プログラム

#! python3
# 機能
#  会費リマインダーメールを送信する
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python dues_reminder.py

import os
import sys
import openpyxl

sys.path.append(os.path.abspath(".."))
from gmail_sender import gmail_sender

# 未払いの会員を取得する
def get_unpaid_members():
    # Excel読み込み
    path = os.path.join(os.path.dirname(__file__), "会費管理.xlsx")
    wb = openpyxl.load_workbook(path)
    sheet = wb.worksheets[0]

    # 最新月の取得
    last_col = sheet.max_column
    last_month = sheet.cell(row=1, column=last_col).value

    # 未払いの会員を抽出
    unpaid_members = []
    for row in range(2, sheet.max_row + 1):
        payment = sheet.cell(row=row, column=last_col).value
        if payment != "〇":
            name = sheet.cell(row=row, column=1).value
            email = sheet.cell(row=row, column=2).value
            unpaid_members.append(
                {"name": name, "email": email, "last_month": last_month}
            )
    return unpaid_members


# 未払いの会員にメールを送信する
unpaid_members = get_unpaid_members()
for member in unpaid_members:
    subject = "会費のご入金のお願い"
    body = """
{} 様

{}以前の会費のご入金が完了しておりません。
お早めにお支払いください。
""".format(
        member["name"], member["last_month"]
    )

    print("{}にメールを送信中...".format(member["name"]))
    gmail_sender.send(member["email"], subject, body)

メール送信には以下で作成したモジュールを使用しています。

stmtk358.hatenablog.com

注意点として、Pythonは実行ファイルがあるフォルダ配下にしかパスが通らないようです。

私の環境ではプログラムごとにフォルダを分けているため、dues_reminder.pyを実行する際にgmail_sender.pyが参照できません。

..\Python\mail\dues_reminder\dues_reminder.py
..\Python\mail\gmail_sender\gmail_sender.py

この問題を回避するため、sys.pathにmailフォルダ(..)を追加して、gmail_senderフォルダ配下も参照できるようにしています。

sys.path.append(os.path.abspath(".."))
from gmail_sender import gmail_sender

使い方

  1. Pythonを実行する

実行コマンド

python dues_reminder.py

openpyxlをインストールしていない場合は以下のコマンドでインストールして下さい。

pip install openpyxl

参考文献

www.oreilly.co.jp