📬

定時メール自動送信システムの作成

2024/06/19に公開

定時メール自動送信プログラム

私の所属する組織には,あるルールがある,それは「毎日,その日の実施内容を全体にメールで送信しなければならない!」というルールである.
そこで僕は考えた,毎日決まった日時にメールのタイトルとか本文とかいい感じにして送信してくれるシステムを作っちゃおう!と...

1. システム概要図

ということで,今回作った定時メール自動送信システムの全体概要図はこんな感じ.

システム概要_ver1.1.0.png

まず,毎日指定した時刻にPythonプログラムが実行されるような仕様となっている.Pythonプログラムは,プログラムが実行されたことを管理者にLINEを介して伝える
また,その日の日時や,メールの本文に書きこむ内容は,GoogleCalendarやNotionを用いて読み込むことにした.
作成された本文は,SMTPプロトコルでメールサーバーに送信され,全体に共有される.また,Notionには複数のユーザーが登録可能である.
※より詳しい仕様定義や動作内容は以下にリストアップする.

仕様定義

  • 毎日メールを送信する
    ・毎日とは言っても,休祝日に送信するのは健全ではない.そのため,休祝日は送信をしないこととする.
    ・ユーザー全員が全く同じ時間に送信するのは違和感がある.そのため,ユーザーごとに送信を行う時間を変えることとする.
    ・メールは,各ユーザーのメールアドレスから特定のメールサーバーに対して送信することとする.

  • ユーザーに通知する
    ・自分のメールがいつ送信されるのかが分かった方が確認がしやすく,プログラムが正常に動作しているか把握しやすい.そのため,全ユーザーに対してユーザー名と通信予定時刻を通知することとする.
    ・一部のユーザーに不具合が生じた場合,該当するユーザーがそのことを把握するために,送信予定時刻の代わりに×を表示することとする.

  • 内容が毎日変わる
    定時メールの内容は,データベースで管理しておくこととする.
    ・データベースはユーザー単位で管理され,各プロパティには「名前,パスワード,メールアドレス,メール本文,署名」などを記述しておくこととする.
    ・ユーザーはデータベースを編集することで,毎日の送信内容を変更することができることとする.
    ・メールには,自分が参加する予定を1週間分記載することとする.
    ・データベースには,パスワードやメールアドレスなど重要な情報が保存されている.そのため,ユーザーは他のユーザー情報に対して干渉することができないこととする.

動作手順

  1. スケジューラーによって,指定時間にプログラムを実行
  2. NotionAPIによって,登録されている全ユーザーのデータベースIDを取得
  3. 各ユーザーの送信予定時間を設定する(指定時間+0~60分)
  4. LINENotionによって,「ユーザー名」と「送信予定時間」を通知する

LINE通知

※以下,各ユーザーを別スレッドで並行処理を行う

  1. 各ユーザーのデータベースにアクセス
  2. 各ユーザーの「送信用アドレス」「パスワード」「メール本文」などの情報を取得
  3. GoogleCalendarのマスターURLによって,ical形式のデータを取得
  4. 該当ユーザーが参加する1週間分の予定を取得

メール情報取得までの流れ

  1. メール本文を作成し,メールサーバーに送信

メール送信までの流れ

必要ライブラリ

jpholiday==0.1.8
schedule==1.2.1
icalendar==5.0.11
notion_client==2.2.1

GitHubリポジトリ

もし興味を少しでも持ってくれた方は,以下のGitHubリポジトリからクローンして使ってみてください!GitHubも随時更新していきます!

https://github.com/haradakaito/Automatic_Email_Sending

Discussion