104 lines
3.3 KiB
Markdown
104 lines
3.3 KiB
Markdown
# Yoga Email Finder
|
|
|
|
Monitors an IMAP inbox via IDLE for District Flow Yoga reservation emails and automatically creates events on a CalDAV calendar.
|
|
|
|
## How it works
|
|
|
|
1. On startup it scans all existing emails from `info@districtflowyoga.com` and adds any unprocessed reservations to your calendar.
|
|
2. It then enters IMAP IDLE so the server pushes new email notifications instantly — no polling.
|
|
3. Each processed `Message-ID` is recorded in `.processed_ids` so restarts never create duplicate events.
|
|
|
|
---
|
|
|
|
## Installation on Ubuntu Server
|
|
|
|
### 1. Copy files to the server
|
|
|
|
```bash
|
|
scp -r yoga_email_finder/ youruser@yourserver:/tmp/yoga-email-finder
|
|
```
|
|
|
|
Or clone/copy however you prefer.
|
|
|
|
### 2. Create a dedicated user and install directory
|
|
|
|
```bash
|
|
sudo useradd --system --no-create-home --shell /usr/sbin/nologin yoga-email-finder
|
|
sudo mkdir /opt/yoga-email-finder
|
|
sudo cp /tmp/yoga-email-finder/* /opt/yoga-email-finder/
|
|
sudo chown -R yoga-email-finder:yoga-email-finder /opt/yoga-email-finder
|
|
```
|
|
|
|
### 3. Create a Python virtual environment and install dependencies
|
|
|
|
```bash
|
|
sudo apt install python3 python3-venv -y
|
|
|
|
sudo -u yoga-email-finder python3 -m venv /opt/yoga-email-finder/venv
|
|
sudo -u yoga-email-finder /opt/yoga-email-finder/venv/bin/pip install -r /opt/yoga-email-finder/requirements.txt
|
|
```
|
|
|
|
### 4. Create the config file
|
|
|
|
```bash
|
|
sudo cp /opt/yoga-email-finder/config.example.yaml /opt/yoga-email-finder/config.yaml
|
|
sudo nano /opt/yoga-email-finder/config.yaml
|
|
```
|
|
|
|
Fill in your IMAP and CalDAV credentials. See `config.example.yaml` for all options.
|
|
|
|
Lock down permissions so only the service user can read the credentials:
|
|
|
|
```bash
|
|
sudo chown yoga-email-finder:yoga-email-finder /opt/yoga-email-finder/config.yaml
|
|
sudo chmod 600 /opt/yoga-email-finder/config.yaml
|
|
```
|
|
|
|
### 5. Install and enable the systemd service
|
|
|
|
```bash
|
|
sudo cp /opt/yoga-email-finder/yoga-email-finder.service /etc/systemd/system/
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable yoga-email-finder
|
|
sudo systemctl start yoga-email-finder
|
|
```
|
|
|
|
### 6. Check it's running
|
|
|
|
```bash
|
|
sudo systemctl status yoga-email-finder
|
|
sudo journalctl -u yoga-email-finder -f
|
|
```
|
|
|
|
---
|
|
|
|
## Configuration reference
|
|
|
|
| Key | Required | Default | Description |
|
|
|-----|----------|---------|-------------|
|
|
| `imap.host` | yes | — | IMAP server hostname |
|
|
| `imap.port` | no | `993` | IMAP port |
|
|
| `imap.ssl` | no | `true` | Use TLS |
|
|
| `imap.username` | yes | — | IMAP login |
|
|
| `imap.password` | yes | — | IMAP password |
|
|
| `imap.folder` | no | `INBOX` | Mailbox folder to watch |
|
|
| `caldav.url` | yes | — | CalDAV calendar URL |
|
|
| `caldav.username` | yes | — | CalDAV login |
|
|
| `caldav.password` | yes | — | CalDAV password |
|
|
| `caldav.calendar_name` | no | first calendar | Target calendar name |
|
|
| `sender_filter.email` | no | — | Filter by sender address |
|
|
| `sender_filter.name` | no | — | Filter by sender display name (fallback) |
|
|
| `timezone` | no | system local | IANA timezone for events (e.g. `America/New_York`) |
|
|
| `class_duration_minutes` | no | `60` | Assumed class length |
|
|
| `processed_ids_file` | no | `.processed_ids` | Path to the duplicate-tracking file |
|
|
|
|
---
|
|
|
|
## Updating
|
|
|
|
```bash
|
|
sudo systemctl stop yoga-email-finder
|
|
sudo cp new-version/yoga_email_finder.py /opt/yoga-email-finder/
|
|
sudo systemctl start yoga-email-finder
|
|
```
|