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: 3 months ago
JSON representation
Scheduled Email Auto-Sending System.
- Host: GitHub
- URL: https://github.com/haradakaito/automatic_email_sending
- Owner: haradakaito
- Created: 2023-11-05T06:46:15.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-27T03:31:07.000Z (9 months ago)
- Last Synced: 2025-01-04T16:41:37.697Z (4 months ago)
- Topics: automailer, googleclendarapi, notion-api, python, raspberry-pi
- Language: Python
- Homepage: https://qiita.com/haradakaito/items/6d7e81651d3b37e11183
- Size: 231 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 定時メール自動送信システム
## 1 システム概要図
### 2. ファイル構成
## 3. 仕様定義
- **毎日メールを送信する**
・毎日とは言っても,休祝日に送信するのは健全ではない.そのため,**休祝日は送信をしない**こととする.
・ユーザー全員が全く同じ時間に送信するのは違和感がある.そのため,**ユーザーごとに送信を行う時間を変える**こととする.
・メールは,各ユーザーのメールアドレスから**特定のメールサーバーに対して送信する**こととする.
- **ユーザーに通知する**
・自分のメールがいつ送信されるのかが分かった方が確認がしやすく,プログラムが正常に動作しているか把握しやすい.そのため,**全ユーザーに対してユーザー名と通信予定時刻を通知する**こととする.
・一部のユーザーに不具合が生じた場合,該当するユーザーがそのことを把握するために,送信予定時刻の代わりに×を表示することとする.
- **内容が毎日変わる**
・**定時メールの内容は,データベースで管理しておく**こととする.
・データベースはユーザー単位で管理され,**各プロパティには「名前,パスワード,メールアドレス,メール本文,署名」などを記述しておく**こととする.
・ユーザーは**データベースを編集することで,毎日の送信内容を変更することができる**こととする.
・メールには,**自分が参加する予定を1週間分記載する**こととする.
・データベースには,パスワードやメールアドレスなど重要な情報が保存されている.そのため,ユーザーは**他のユーザー情報に対して干渉することができない**こととする.- **動作環境**
・**Windows**もしくは,**RaspberryPi OS**で動作する.## 4. システムフロー
### 4.1 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. ユーザー追加方法
