Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/haradakaito/automatic_email_sending
- Owner: haradakaito
- Created: 2023-11-05T06:46:15.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-27T03:31:07.000Z (4 months ago)
- Last Synced: 2024-08-27T04:43:29.878Z (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 システム概要図
![システム概要_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)