Initial README
This commit is contained in:
		
					parent
					
						
							
								66476a23b1
							
						
					
				
			
			
				commit
				
					
						8a0e14f1f6
					
				
			
		
					 1 changed files with 108 additions and 2 deletions
				
			
		
							
								
								
									
										110
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										110
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,109 @@
 | 
			
		|||
# caldav-email-reminders
 | 
			
		||||
# CalDAV Email Reminder Service
 | 
			
		||||
 | 
			
		||||
a lightweight, self-hosted service that polls a CalDAV calendar and sends email reminders for upcoming events with `VALARM` email actions.
 | 
			
		||||
This project provides a self-contained, Dockerized email reminder system that polls a CalDAV calendar, extracts scheduled email alarms (`VALARM` with `ACTION:EMAIL`), and delivers reminder emails based on their defined trigger times. It is designed as a workaround for CalDAV servers that either do not support email reminders or are unreliable in doing so.
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
 | 
			
		||||
- Pulls events from one or more CalDAV calendars using standard `REPORT` queries
 | 
			
		||||
    
 | 
			
		||||
- Expands recurring events using `RRULE` and supports date-only and timezone-aware events
 | 
			
		||||
    
 | 
			
		||||
- Identifies and schedules `VALARM` blocks with `ACTION:EMAIL`
 | 
			
		||||
    
 | 
			
		||||
- Sends email reminders using SMTP with support for SSL or STARTTLS
 | 
			
		||||
    
 | 
			
		||||
- Uses a lightweight SQLite database for state tracking and deduplication
 | 
			
		||||
    
 | 
			
		||||
- Configurable via `.env` and runs entirely within Docker
 | 
			
		||||
    
 | 
			
		||||
- Emits all logs to Docker stdout (`docker logs`) — no syslog or cron daemon needed
 | 
			
		||||
    
 | 
			
		||||
- Handles long-term sync and dispatch via simple background loops
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
## How It Works
 | 
			
		||||
 | 
			
		||||
1. **sync.py**:
 | 
			
		||||
    
 | 
			
		||||
    - Discovers calendar URLs (or uses those provided).
 | 
			
		||||
        
 | 
			
		||||
    - Downloads `.ics` files for all VEVENTs.
 | 
			
		||||
        
 | 
			
		||||
    - Extracts `VALARM` blocks with `ACTION:EMAIL`.
 | 
			
		||||
        
 | 
			
		||||
    - Calculates trigger times based on `TRIGGER` + `DTSTART`.
 | 
			
		||||
        
 | 
			
		||||
    - Stores scheduled reminders in SQLite.
 | 
			
		||||
        
 | 
			
		||||
2. **dispatch.py**:
 | 
			
		||||
    
 | 
			
		||||
    - Runs periodically to find due reminders.
 | 
			
		||||
        
 | 
			
		||||
    - Sends emails via SMTP.
 | 
			
		||||
        
 | 
			
		||||
    - Marks each reminder as sent to prevent duplicates.
 | 
			
		||||
        
 | 
			
		||||
3. **entrypoint.sh**:
 | 
			
		||||
    
 | 
			
		||||
    - Exports environment variables.
 | 
			
		||||
        
 | 
			
		||||
    - Starts two background loops:
 | 
			
		||||
        
 | 
			
		||||
        - Syncs calendar events every `SYNC_INTERVAL` seconds.
 | 
			
		||||
            
 | 
			
		||||
        - Dispatches reminders every `DISPATCH_INTERVAL` seconds.
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
## Requirements
 | 
			
		||||
 | 
			
		||||
- Docker
 | 
			
		||||
    
 | 
			
		||||
- A CalDAV server with accessible credentials
 | 
			
		||||
    
 | 
			
		||||
- SMTP credentials for an outbound mail service
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
## Environment Variables
 | 
			
		||||
 | 
			
		||||
Place these in a `.env` file in the root of your project:
 | 
			
		||||
 | 
			
		||||
```env
 | 
			
		||||
...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Building the Docker Image
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
docker build -t caldav-reminder .
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Running the Container
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
docker run -d --rm \
 | 
			
		||||
--env-file .env \
 | 
			
		||||
-v caldav_reminder_db:/data \
 | 
			
		||||
--name caldav-cron \
 | 
			
		||||
caldav-reminder
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
All output is logged to stdout and can be viewed with:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
docker logs -f caldav-cron
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Notes
 | 
			
		||||
 | 
			
		||||
- The database stores event UIDs, last-modified timestamps, and reminder entries to avoid duplicate processing.
 | 
			
		||||
    
 | 
			
		||||
- Recurring events are expanded into individual trigger times within a sliding window.
 | 
			
		||||
    
 | 
			
		||||
- Email reminders are only sent for future occurrences not yet marked as sent.
 | 
			
		||||
    
 | 
			
		||||
- This project assumes a single recipient address (`EMAIL_TO`) for simplicity.
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
\[MIT License\] or other appropriate license of your choosing.
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue