2026-02-18 21:41:08 -05:00

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
```