Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/haradakaito/automatic_email_sending

Scheduled Email Auto-Sending System.
https://github.com/haradakaito/automatic_email_sending

automailer googleclendarapi notion-api python raspberry-pi

Last synced: about 1 month ago
JSON representation

Scheduled Email Auto-Sending System.

Awesome Lists containing this project

README

        

# 定時メール自動送信システム
## 1 システム概要図
![システム概要_ver1 1 0](https://github.com/haradakaito/Automatic_Email_Sending/assets/75819611/5c1dc72e-51ff-4c23-b7ef-180dad5381ed)

### 2. ファイル構成
![ファイル構成図_v1 1 1](https://github.com/haradakaito/Automatic_Email_Sending/assets/75819611/f5035bbe-5c3b-41f7-91bf-6bb8142c32f7)

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

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

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

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

## 4. システムフロー
### 4.1 LINE通知機能
![LINE通知](https://github.com/haradakaito/Automatic_Email_Sending/assets/75819611/bab1d95e-8a61-40fc-b6d7-c0b7abb24e23)

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

### 4.2 メール情報取得
![メール情報取得までの流れ](https://github.com/haradakaito/Automatic_Email_Sending/assets/75819611/f7cdacd4-aad7-4669-8008-e14ab2261e6f)

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

### 4.3 メール送信機能
![メール送信までの流れ](https://github.com/haradakaito/Automatic_Email_Sending/assets/75819611/3d5c0fc4-2236-4485-a6a9-5de3d2f67b61)

メール送信は,**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. ユーザー追加方法
![ユーザー追加方法](https://github.com/haradakaito/Automatic_Email_Sending/assets/75819611/2e5bba75-fbf8-439d-8d94-368556518977)