Easily schedule reminders to be emailed
Project description
RemindMail: Reminder Management Tool
A powerful CLI designed to help you schedule and organize reminders efficiently and effectively. Easily manage your To Do list, schedule one-time or recurring reminders, add notes, and view and manage upcoming reminders, all from the comfort of your terminal.
Table of Contents
- RemindMail: Reminder Management Tool
- ✨ New in 3.0.0:
- Features
- Dependencies
- Installation and Setup
- Usage
- Contributing
- License
- Disclaimer
- Author Info
✨ New in 3.0.0:
- Migrated from a custom
.mdfile to a YAML file- Allows for easier extensibility in future releases
- Added optional tags for more flexible scheduling
- Better handling for errors and edge case
- Improved TUI for delete and command options
Features
RemindMail offers a variety of features to enhance your productivity:
- Easily manage your To Do list from anywhere in the terminal
- Send one-time or recurring reminders to your inbox
- Add notes or "for later" reminders
- View and manage upcoming reminders
- Organize reminders with tags for better filtering
Dependencies
zshorbashpython3- cabinet
- used to store the
remindmail.ymlpath and other important variables
- used to store the
- a configured SMTP server (many email providers offer this, but Gmail will not work)
Installation and Setup
Full Install (recommended)
pip install remindmail
# adjust path accordingly
pip install -r requirements.md
cabinet --configure # see below for instructions
Minimal Install (experimental)
curl -s https://api.github.com/repos/tylerjwoodfin/remindmail/releases/latest \
| grep "browser_download_url" \
| cut -d '"' -f 4 \
| xargs curl -L -o remindmail.pex
sudo mv remindmail.pex /usr/local/bin/remind
remind -m cabinet --config
Cabinet Configuration
-
cabinet is installed as a dependency.
-
initialize using
cabinet --configure; see cabinet's README for details. -
add the properties below using
cabinet -e:
{
"remindmail": {
"mongodb_enabled": true, # optional if using mongodb - default false
"subject_prefix": "Reminder ", # optional - custom prefix for email subjects (default: "📌 ")
"path": {
"file": "/path/to/remindmail.yml"
}
},
"email": {
"from": "YourUniqueAndNonGmailEmailAddress",
"from_pw": "YourPassword",
"from_name": "Your Name",
"to": "RemindersSentToThisEmailAddress",
"smtp_server": "your domain's smtp server",
"imap_server": "your domain's imap server",
"port": 465
}
}
-
Gmail will not work due to their security restrictions.
-
it's very bad practice to store your password in plaintext; take appropriate precautions.
MongoDB Configuration
- MongoDB is used to log reminders when
mongodb_enabledis set totrue. - This is configured via the Cabinet configuration in
~/.config/cabinet/config.json- see https://www.github.com/tyjerwoodfin/cabinet for configuration instructions.
Scheduling Reminder Emails
-
type "crontab -e" in the terminal and add something like:
0 4 * * * remind --generate(sends matching reminders at 4AM)0 4 * * * remind --later(sends emails scheduled for later)
-
your setup may require
remindto be replaced with something like:0 4 * * * python3 /path/to/site-packages/remind/remind.py --generate
-
this function requires use of SMTP through Cabinet; please ensure you've configured this correctly.
Usage
remind: Schedule a new reminder interactivelyremind --title 'reminder title' --when 'june 20': Schedule a new reminder programaticallyremind --title 'reminder title' --when '2024-06-20': Schedule a new reminder programaticallyremind --title 'reminder title' --when 'every 3 weeks': Schedule a new reminder programaticallyremind --title 'reminder title' --when 'friday': Schedule a new reminder programaticallyremind --title 'reminder title' --when friday --save: Schedule a new reminder programatically, saves without confirmationremind --title 'reminder title' --when 'every 2 Mondays': Schedule a new reminder programaticallyremind --title 'reminder title' --when 'now': Sends an email immediatelyremind -h(or--help): Displays usage information.remind -g(or--generate): Generates all reminders scheduled for today.- use
--dry-runto see what would be sent without actually sending anything. remind -g --file=/path/to/special/remindmail.ymlwill use the specified file instead of the default.- I recommend setting up a crontab.
- use
remind --later: Emails reminders that are marked with[later]remind --st(or--show-tomorrow): Lists reminders in remindmail.yml that target tomorrow's dateremind --sw(or--show-week): Lists reminders for the next 7 daysremind -e(or--edit): Opensremindmail.ymlin your configured editorremind --list-all: Lists all reminders inremindmail.yml. Useful for debugging.remind --find 'search text': Displays reminders containing the given text in title, date, or day fields.- Text search examples:
remind --find laundry,remind --find monday - Date search examples:
remind --find 2025-04-24,remind --find 04/24 - If search text is a valid date, displays reminders that would send on that date.
- Text search examples:
cabinet --config: Configures cabinet
Scheduling Reminders With TUI
- unless
--saveis used, a confirmation will appear. - use arrow keys (or
jandkin VI Mode) to navigate. - arrow left and right to iterate through:
- type
- value
- frequency
- starting date ("Starts On")
- offset
VI Mode and Keybindings
- when the confirmation appears, use
jorkto enter VI mode. jandknavigate up and down;handlnavigate left and right.- use
ito exit VI mode. - use
qto cancel the reminder.
Scheduling Reminders With remindmail.yml
- The
remindmail.ymlfile is a YAML configuration file that contains your reminders. - Each reminder is defined as an object under the
reminderskey.
YAML Key Reference
name
- Type:
string - Description: The description or title of the reminder.
every
- Type:
int - Description: How often the reminder recurs (e.g. every
2units of time). - Default unit:
days(unlessunitis specified).
unit
- Type:
string(days,weeks,months) - Description: Time unit for
every. Only needed for non-day intervals.
offset
- Type:
int - Description: Delay (in same units as
every) before the first occurrence.
day
- Type:
string(mon,tue, ...,sun) - Description: Specifies a day of the week for weekly reminders.
dom
- Type:
int(1–31) - Description: Day of the month when the reminder occurs.
date
- Type:
string(YYYY-MM-DDorMM-DD) - Description: A specific one-time or annual date for the reminder.
later
- Type:
bool - Description: Marks the reminder as unscheduled or saved for later.
delete
- Type:
bool - Description: If
true, the reminder should be deleted after it's triggered.
notes
- Type:
string - Description: If set, sends within the body of the email and marks the subject with 📝. Basic HTML is supported.
command
- Type:
string - Description: If set, runs the command and outputs the results to the body of the email.
email
- Type:
string - Description: Optional email address to send this specific reminder to. If not set, uses the default email configured in Cabinet's
email -> tosetting.
tags
Optional list of tags to categorize and filter reminders. Tags can be used to group related reminders and filter which reminders are sent when using the --generate command.
Example:
reminders:
- name: "Weekly team meeting"
day: "mon"
tags: ["work", "meeting"]
notes: "Don't forget to prepare the agenda"
- name: "Grocery shopping"
every: 7
tags: ["personal", "shopping"]
notes: "Buy milk and eggs"
You can then filter reminders by tags when generating:
remindmail --generate --tags work,meeting # Only sends reminders with work or meeting tags
remindmail --generate --tags personal # Only sends reminders with personal tag
remindmail --generate # Sends all reminders (default behavior)
Tags can be specified by a string or list in the YAML file:
tags: "meeting"
or
tags: ["work", "meeting"]
Good Examples
Here are some examples of how your remindmail.yml file could look:
reminders:
- name: Workout and Stretch
day: mon,wed,fri
delete: false
- name: Try Cursor IDE
date: 2025-03-31
delete: true
notes: This will be <u>VERY</u> useful! <b>WOW</b>
- name: Laundry and Sheets
every: 6
offset: 5
delete: false
- name: Monthly Budget
unit: months
- name: Change Toothbrush Head
every: 3
unit: months
offset: 2
delete: false
- name: Try Umbrell OS
later: true
- name: Update Team Spreadsheet
day: wed
every: 2
offset: 1
- name: Homework File Count
day: fri
command: find ~/homework -maxdepth 1 -type f | wc -l
notes: This is how many files are in ~/homework.
- name: Send to spouse
date: 2025-11-15
email: spouse@protonmail.com
notes: This reminder will be sent to a different email address
⚠️ Comments and extraneous spacing will NOT be saved after reminders are generated.
Contributing
- Contributions to RemindMail are welcome! Please feel free to fork the repository, make your changes, and submit a pull request.
License
- RemindMail is released under the MIT license. For more details, see the LICENSE file in the repository.
Disclaimer
- This is a non-commercial, open-source project; your data is your responsibility. Take appropriate precautions to shield sensitive information.
- I cannot be held responsible for any data loss or other issues that may arise from using this tool.
Author Info
- Tyler Woodfin
- https://tyler.cloud
- feedback-remindmail@tyler.cloud
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file remindmail-1!3.1.2.tar.gz.
File metadata
- Download URL: remindmail-1!3.1.2.tar.gz
- Upload date:
- Size: 34.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4adc8f1edc05973cf8a79da0ee21ad921907ff67728d0cdde845bc61b34265d8
|
|
| MD5 |
b514ff7f8d89df9ecb0feb5e4e1887da
|
|
| BLAKE2b-256 |
1f04b3b5faa2805449fe945fab81c5d520a2dccbc0868145bdcb87db891d4aba
|
File details
Details for the file remindmail-1!3.1.2-py3-none-any.whl.
File metadata
- Download URL: remindmail-1!3.1.2-py3-none-any.whl
- Upload date:
- Size: 32.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4c439750d1fa84371c72616699639bd1e4018cbacef01803e22af1496f60b41
|
|
| MD5 |
e561f274f335162ea433cbfc2b04674d
|
|
| BLAKE2b-256 |
bd2bd967eb9667f6ab160cfe2960ae034cdeaa9a00d3a6c013069952392dae57
|