-
毎日メールを送信する
・毎日とは言っても,休祝日に送信するのは健全ではない.そのため,休祝日は送信をしないこととする.
・ユーザー全員が全く同じ時間に送信するのは違和感がある.そのため,ユーザーごとに送信を行う時間を変えることとする.
・メールは,各ユーザーのメールアドレスから特定のメールサーバーに対して送信することとする. -
ユーザーに通知する
・自分のメールがいつ送信されるのかが分かった方が確認がしやすく,プログラムが正常に動作しているか把握しやすい.そのため,全ユーザーに対してユーザー名と通信予定時刻を通知することとする.
・一部のユーザーに不具合が生じた場合,該当するユーザーがそのことを把握するために,送信予定時刻の代わりに×を表示することとする. -
内容が毎日変わる
・定時メールの内容は,データベースで管理しておくこととする.
・データベースはユーザー単位で管理され,各プロパティには「名前,パスワード,メールアドレス,メール本文,署名」などを記述しておくこととする. ・ユーザーはデータベースを編集することで,毎日の送信内容を変更することができることとする.
・メールには,自分が参加する予定を1週間分記載することとする.
・データベースには,パスワードやメールアドレスなど重要な情報が保存されている.そのため,ユーザーは他のユーザー情報に対して干渉することができないこととする. -
動作環境
・Windowsもしくは,RaspberryPi OSで動作する.
ユーザーに対する通知機能を実装するためにLINE Notifyを使用した.
これは,LINEには複数のユーザーをグループという集合で管理できるため,複数のユーザーに同時に共有することができると考えたためである.
また,LINENotifyに与える通知内容を作成する段階で,データベースから全ユーザーの名前を取得している.
更に,各ユーザーに対して設定されたランダムな送信時刻を対応させたうえで,通知メッセージを作成する.
ユーザーの情報を管理するデータベースにはNotionを使用した.
Notionにはデータベースを操作できるAPIが提供されており,実装コストが低くなると考えた.
Notionを用いることで,NotionのUIでデータベース操作が可能となり,フロントエンド開発の手間が省けると考えた.
メール送信は,各ユーザーをマルチスレッドで実行する.
各スレッドで,NotionAPIを用いてメール作成/送信に必要な情報を取得する.
取得した情報はjson形式で渡されるため,それらを解析し,必要な情報を辞書型で送信用の関数に渡す.
メール送信は,SMTPサーバーのホスト名とポート番号でサーバーを指定する.(Outlookで送信する場合は,ポート番号587を指定する.)
その後,STARTTLS方式と呼ばれる暗号化通信に対応しているのかを確認する.
STARTLTS通信を確立し,サーバーにログインした後,ユーザーのメールを指定したドメインに対して送信する.
$ pip install -r requirements.txt
$ python lib/master-win.py
$ sudo bash install.sh