Skip to content

haradakaito/Automatic_Email_Sending

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

1 システム概要図

システム概要_ver1 1 0

2. ファイル構成

ファイル構成図_v1 1 1

3. 仕様定義

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

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

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

  • 動作環境
    Windowsもしくは,RaspberryPi OSで動作する.

4. システムフロー

4.1 LINE通知機能

LINE通知

ユーザーに対する通知機能を実装するためにLINE Notifyを使用した.
これは,LINEには複数のユーザーをグループという集合で管理できるため,複数のユーザーに同時に共有することができると考えたためである.
また,LINENotifyに与える通知内容を作成する段階で,データベースから全ユーザーの名前を取得している.
更に,各ユーザーに対して設定されたランダムな送信時刻を対応させたうえで,通知メッセージを作成する.

4.2 メール情報取得

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

ユーザーの情報を管理するデータベースにはNotionを使用した.
Notionにはデータベースを操作できるAPIが提供されており,実装コストが低くなると考えた.
Notionを用いることで,NotionのUIでデータベース操作が可能となり,フロントエンド開発の手間が省けると考えた.
メール送信は,各ユーザーをマルチスレッドで実行する.
各スレッドで,NotionAPIを用いてメール作成/送信に必要な情報を取得する.
取得した情報はjson形式で渡されるため,それらを解析し,必要な情報を辞書型で送信用の関数に渡す.

4.3 メール送信機能

メール送信までの流れ

メール送信は,SMTPサーバーのホスト名とポート番号でサーバーを指定する.(Outlookで送信する場合は,ポート番号587を指定する.)
その後,STARTTLS方式と呼ばれる暗号化通信に対応しているのかを確認する.
STARTLTS通信を確立し,サーバーにログインした後,ユーザーのメールを指定したドメインに対して送信する.

5. 定期プログラムの実行方法

Windows

$ pip install -r requirements.txt
$ python lib/master-win.py

Raspberry Pi OS

$ sudo bash install.sh

6. ユーザー追加方法

ユーザー追加方法