# RemindMail: Reminder Management Tool
Welcome to RemindMail, a powerful CLI designed to help you schedule and organize reminders efficiently and effectively. RemindMail is a Python-based tool that allows you to schedule reminders for yourself and receive them in your inbox. With RemindMail, you can easily manage your To Do list, schedule one-time or recurring reminders, add notes, and view and manage upcoming reminders.
## 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
# Dependencies
- Python3
- [cabinet](https://pypi.org/project/cabinet/)
- used to store JSON data; specifically, used to store the `remind.md` path and other important variables
- a unique, non-Gmail address specifically for this project
- do not use an email address that you use in other areas of your life
- do not re-use a password you've used anywhere else; use a unique password.
# Setup
```bash
python3 -m pip install remindmail
# adjust path accordingly
python3 -m pip install -r requirements.md
cabinet --configure # cabinet must be configured properly
```
## Cabinet Configuration
- [cabinet](https://github.com/tylerjwoodfin/cabinet) is installed as a dependency.
- initialize using `cabinet --configure`; see cabinet's README for details.
- configure cabinet with the properties below using `cabinet -e`:
```json
{
"remindmail": {
"path": {
"file": "/path/to/remind.md"
}
},
"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
}
}
```
- note that Gmail will _not_ work due to their security restrictions.
- it's very bad practice to store your password in plaintext; for this reason, never sync this file.
- always use a unique email address specifically for this, and _especially_ use a unique password.
## 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 `remind` to be replaced with something like:
- `0 4 * * * python3 /path/to/site-packages/remind/remind.py --generate`
- this function requires use of SMTP; please ensure you've configured this correctly.
# Usage
- `remind`: Schedule a new reminder interactively
- `remind --title 'reminder title' --when 'june 20'`: Schedule a new reminder programatically
- `remind --title 'reminder title' --when '2024-06-20'`: Schedule a new reminder programatically
- `remind --title 'reminder title' --when 'every 3 weeks'`: Schedule a new reminder programatically
- `remind --title 'reminder title' --when 'friday'`: Schedule a new reminder programatically
- `remind --title 'reminder title' --when friday --save`: Schedule a new reminder programatically, saves without confirmation
- `remind --title 'reminder title' --when 'every 2 Mondays'`: Schedule a new reminder programatically
- `remind --title 'reminder title' --when 'now'`: Sends an email immediately
- `remind -h` (or `--help`): Displays usage information.
- `remind -g` (or `--generate`): Generates all reminders scheduled for today.
- I recommend setting up a crontab.
- `remind --later`: Emails reminders that are marked with `[later]`
- `remind --st` (or `--show-tomorrow`): Lists reminders in remind.md that target tomorrow's date
- `remind --sw` (or `--show-week`): Lists reminders for the next 7 days
- `remind -e` (or `--edit`): Opens `remind.md` in your configured editor
- `cabinet --config`: Configures [cabinet](https://pypi.org/project/cabinet/)
## Using the TUI to Schedule Reminders
- unless `--save` is used, a confirmation will appear.
- use arrow keys (or `j` and `k` in VI Mode) to navigate.
- arrow left and right to iterate through:
- type
- value
- frequency
- offset
### VI Mode and Keybindings
- when the confirmation appears, use `j` or `k` to enter VI mode.
- `j` and `k` navigate up and down; `h` and `l` navigate left and right.
- use `i` to exit VI mode.
- use `q` to cancel the reminder.
## Notes about `Offset`
- when scheduling a reminder, you can adjust the `offset` field to shift reminder schedules.
- For instance, one reminder may be "every 2 weeks", and the other can be every 2 weeks with an offset of 1, resulting in alternating reminders.
The offset is determined by the epoch date.
- The Epoch time is the number of seconds since January 1, 1970, UTC.
- For example, if the current time is 1619394350, then today is Sunday, April 25, 2021 at 11:45:50PM UTC.
- The "week number" is calculated by {epochTime}/60/60/24/7.
- 1619394350 /60/60/24/7 ~= 2677
- 2677 % 3 == 1, meaning scheduling a reminder for [W,3] would be sent last week, but not this week (or next week or the week after).
## remind.md
These are some examples of how your remind.md file will look.
## Good Examples
```markdown
[w,1] Laundry
- this will send each week on Sunday.
[w,2] Sheets
- This will be sent every 2 weeks on Sunday.
[m,3] Review Budget
- This will be sent on the 1st of every 3 months.
[m,3,2] Change AC filter
- every 3 months, with an offset of 2
(see notes about Offset below)
[2024-05-03]d send report
- send on May 3
- This will be deleted after it's sent, as indicated by `]d`.
[09-20,1] Get a Flu Shot
This will be sent on September 20.
By the way, anything underneath a reminder tag is considered a note and will
be sent in the body of the email.
[dow,fri] Submit Timesheet
<b>Will be sent every Friday. Reminder notes support HTML.</b>
[dow,fri,2] Payday!
- This will send every other Friday.
[dow,thu,1]c ls > /home/tyler/directory.log
- Reminders ending with `]c` will be executed as commands, rather than
sent as emails.
[d,1] 40 Daily Pushups
This is sent each day.
[later] play diplomacy board game
This isn't sent, but it is saved for later and can be sent using
`remind --later`.
```
# 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.
# Author Info
Tyler Woodfin
https://tyler.cloud
feedback-remindmail@tyler.cloud
Raw data
{
"_id": null,
"home_page": "https://github.com/tylerjwoodfin/remindmail",
"name": "remindmail",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": null,
"author": "Tyler Woodfin",
"author_email": "feedback-remindmail@tyler.cloud",
"download_url": "https://files.pythonhosted.org/packages/70/ca/0d11c15e063b50b23578cff6ae533daa111b293e302a43a64b29d21fe8c1/remindmail-1!2.0.1.tar.gz",
"platform": null,
"description": "# RemindMail: Reminder Management Tool\nWelcome to RemindMail, a powerful CLI designed to help you schedule and organize reminders efficiently and effectively. RemindMail is a Python-based tool that allows you to schedule reminders for yourself and receive them in your inbox. With RemindMail, you can easily manage your To Do list, schedule one-time or recurring reminders, add notes, and view and manage upcoming reminders.\n\n## Features\nRemindMail offers a variety of features to enhance your productivity:\n\n- Easily manage your To Do list from anywhere in the terminal\n- Send one-time or recurring reminders to your inbox\n- Add notes or \"for later\" reminders\n- View and manage upcoming reminders\n\n# Dependencies\n- Python3\n- [cabinet](https://pypi.org/project/cabinet/)\n - used to store JSON data; specifically, used to store the `remind.md` path and other important variables\n- a unique, non-Gmail address specifically for this project\n - do not use an email address that you use in other areas of your life\n - do not re-use a password you've used anywhere else; use a unique password.\n\n# Setup\n\n```bash\n python3 -m pip install remindmail\n\n # adjust path accordingly\n python3 -m pip install -r requirements.md\n\n cabinet --configure # cabinet must be configured properly\n```\n\n## Cabinet Configuration\n- [cabinet](https://github.com/tylerjwoodfin/cabinet) is installed as a dependency.\n\n- initialize using `cabinet --configure`; see cabinet's README for details.\n\n- configure cabinet with the properties below using `cabinet -e`:\n```json\n{\n \"remindmail\": {\n \"path\": {\n \"file\": \"/path/to/remind.md\"\n }\n },\n \"email\": {\n \"from\": \"YourUniqueAndNonGmailEmailAddress\",\n \"from_pw\": \"YourPassword\",\n \"from_name\": \"Your Name\",\n \"to\": \"RemindersSentToThisEmailAddress\",\n \"smtp_server\": \"your domain's smtp server\",\n \"imap_server\": \"your domain's imap server\",\n \"port\": 465\n }\n}\n```\n\n- note that Gmail will _not_ work due to their security restrictions.\n- it's very bad practice to store your password in plaintext; for this reason, never sync this file.\n- always use a unique email address specifically for this, and _especially_ use a unique password.\n\n## Scheduling Reminder Emails\n\n- type \"crontab -e\" in the terminal and add something like:\n - `0 4 * * * remind --generate` (sends matching reminders at 4AM)\n - `0 4 * * * remind --later` (sends emails scheduled for later)\n\n- your setup may require `remind` to be replaced with something like:\n - `0 4 * * * python3 /path/to/site-packages/remind/remind.py --generate`\n\n- this function requires use of SMTP; please ensure you've configured this correctly.\n\n# Usage\n\n- `remind`: Schedule a new reminder interactively\n- `remind --title 'reminder title' --when 'june 20'`: Schedule a new reminder programatically\n- `remind --title 'reminder title' --when '2024-06-20'`: Schedule a new reminder programatically\n- `remind --title 'reminder title' --when 'every 3 weeks'`: Schedule a new reminder programatically\n- `remind --title 'reminder title' --when 'friday'`: Schedule a new reminder programatically\n- `remind --title 'reminder title' --when friday --save`: Schedule a new reminder programatically, saves without confirmation\n- `remind --title 'reminder title' --when 'every 2 Mondays'`: Schedule a new reminder programatically\n- `remind --title 'reminder title' --when 'now'`: Sends an email immediately\n- `remind -h` (or `--help`): Displays usage information.\n- `remind -g` (or `--generate`): Generates all reminders scheduled for today. \n - I recommend setting up a crontab.\n- `remind --later`: Emails reminders that are marked with `[later]`\n- `remind --st` (or `--show-tomorrow`): Lists reminders in remind.md that target tomorrow's date\n- `remind --sw` (or `--show-week`): Lists reminders for the next 7 days\n- `remind -e` (or `--edit`): Opens `remind.md` in your configured editor\n- `cabinet --config`: Configures [cabinet](https://pypi.org/project/cabinet/)\n\n## Using the TUI to Schedule Reminders\n- unless `--save` is used, a confirmation will appear.\n- use arrow keys (or `j` and `k` in VI Mode) to navigate.\n- arrow left and right to iterate through:\n - type\n - value\n - frequency\n - offset\n\n### VI Mode and Keybindings\n- when the confirmation appears, use `j` or `k` to enter VI mode.\n- `j` and `k` navigate up and down; `h` and `l` navigate left and right.\n- use `i` to exit VI mode.\n- use `q` to cancel the reminder.\n\n## Notes about `Offset`\n\n- when scheduling a reminder, you can adjust the `offset` field to shift reminder schedules.\n- For instance, one reminder may be \"every 2 weeks\", and the other can be every 2 weeks with an offset of 1, resulting in alternating reminders.\n\nThe offset is determined by the epoch date.\n- The Epoch time is the number of seconds since January 1, 1970, UTC.\n- For example, if the current time is 1619394350, then today is Sunday, April 25, 2021 at 11:45:50PM UTC.\n- The \"week number\" is calculated by {epochTime}/60/60/24/7.\n - 1619394350 /60/60/24/7 ~= 2677\n - 2677 % 3 == 1, meaning scheduling a reminder for [W,3] would be sent last week, but not this week (or next week or the week after).\n\n## remind.md\n\nThese are some examples of how your remind.md file will look.\n\n## Good Examples\n```markdown\n[w,1] Laundry\n- this will send each week on Sunday. \n\n[w,2] Sheets\n- This will be sent every 2 weeks on Sunday.\n\n[m,3] Review Budget\n- This will be sent on the 1st of every 3 months.\n\n[m,3,2] Change AC filter\n- every 3 months, with an offset of 2\n(see notes about Offset below)\n\n[2024-05-03]d send report\n- send on May 3\n- This will be deleted after it's sent, as indicated by `]d`.\n\n[09-20,1] Get a Flu Shot\nThis will be sent on September 20.\nBy the way, anything underneath a reminder tag is considered a note and will\nbe sent in the body of the email.\n\n[dow,fri] Submit Timesheet\n<b>Will be sent every Friday. Reminder notes support HTML.</b>\n\n[dow,fri,2] Payday!\n- This will send every other Friday.\n\n[dow,thu,1]c ls > /home/tyler/directory.log\n- Reminders ending with `]c` will be executed as commands, rather than\nsent as emails.\n\n[d,1] 40 Daily Pushups\nThis is sent each day.\n\n[later] play diplomacy board game\nThis isn't sent, but it is saved for later and can be sent using\n`remind --later`.\n```\n\n# Contributing\nContributions to RemindMail are welcome! Please feel free to fork the repository, make your changes, and submit a pull request.\n\n# License\nRemindMail is released under the MIT license. For more details, see the LICENSE file in the repository.\n\n# Author Info\nTyler Woodfin\nhttps://tyler.cloud\nfeedback-remindmail@tyler.cloud\n",
"bugtrack_url": null,
"license": ": OSI Approved :: MIT License",
"summary": "Easily schedule reminders to be emailed",
"version": "1!2.0.1",
"project_urls": {
"Homepage": "https://github.com/tylerjwoodfin/remindmail"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "32cbf7078a056898871850906d79597d6696734885368236dfc4b53a988d6510",
"md5": "0338bc918d3bc3c8f08c7130159ec254",
"sha256": "41da9220b1a4ce0ea7268feadaaef38a2370d76c75cab15e266a6b257d48171b"
},
"downloads": -1,
"filename": "remindmail-1!2.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0338bc918d3bc3c8f08c7130159ec254",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 25164,
"upload_time": "2024-11-13T15:23:53",
"upload_time_iso_8601": "2024-11-13T15:23:53.026871Z",
"url": "https://files.pythonhosted.org/packages/32/cb/f7078a056898871850906d79597d6696734885368236dfc4b53a988d6510/remindmail-1!2.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "70ca0d11c15e063b50b23578cff6ae533daa111b293e302a43a64b29d21fe8c1",
"md5": "9584c97a39d060d7e766cbc36ead39ea",
"sha256": "1ddaf5c700ccef2b95b26d5b0502b316bab6f18ea2851e16bf0da743185ccc71"
},
"downloads": -1,
"filename": "remindmail-1!2.0.1.tar.gz",
"has_sig": false,
"md5_digest": "9584c97a39d060d7e766cbc36ead39ea",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 25605,
"upload_time": "2024-11-13T15:23:54",
"upload_time_iso_8601": "2024-11-13T15:23:54.216834Z",
"url": "https://files.pythonhosted.org/packages/70/ca/0d11c15e063b50b23578cff6ae533daa111b293e302a43a64b29d21fe8c1/remindmail-1!2.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-13 15:23:54",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tylerjwoodfin",
"github_project": "remindmail",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "remindmail"
}