feat: Add compose/reply/forward email actions via Apple Mail

- Add compose.py with async actions that export messages via himalaya
- Add apple_mail.py utilities using mailto: URLs and open command
- No AppleScript automation for compose/reply/forward (only calendar replies)
- Update app.py to call async reply/forward actions
- Add SMTP OAuth2 support (disabled by default) in mail.py and auth.py
- Add config options for SMTP send and auto-send via AppleScript
This commit is contained in:
Bendt
2026-01-02 12:11:44 -05:00
parent efe417b41a
commit b52a06f2cf
11 changed files with 926 additions and 13 deletions

15
uv.lock generated
View File

@@ -643,6 +643,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477", size = 86794, upload-time = "2021-09-17T21:40:39.897Z" },
]
[[package]]
name = "icalendar"
version = "6.3.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "python-dateutil" },
{ name = "tzdata" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5d/70/458092b3e7c15783423fe64d07e63ea3311a597e723be6a1060513e3db93/icalendar-6.3.2.tar.gz", hash = "sha256:e0c10ecbfcebe958d33af7d491f6e6b7580d11d475f2eeb29532d0424f9110a1", size = 178422, upload-time = "2025-11-05T12:49:32.286Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/06/ee/2ff96bb5bd88fe03ab90aedf5180f96dc0f3ae4648ca264b473055bcaaff/icalendar-6.3.2-py3-none-any.whl", hash = "sha256:d400e9c9bb8c025e5a3c77c236941bb690494be52528a0b43cc7e8b7c9505064", size = 242403, upload-time = "2025-11-05T12:49:30.691Z" },
]
[[package]]
name = "id"
version = "1.5.0"
@@ -858,6 +871,7 @@ dependencies = [
{ name = "certifi" },
{ name = "click" },
{ name = "html2text" },
{ name = "icalendar" },
{ name = "mammoth" },
{ name = "markitdown", extra = ["all"] },
{ name = "msal" },
@@ -896,6 +910,7 @@ requires-dist = [
{ name = "certifi", specifier = ">=2025.4.26" },
{ name = "click", specifier = ">=8.1.0" },
{ name = "html2text", specifier = ">=2025.4.15" },
{ name = "icalendar", specifier = ">=6.0.0" },
{ name = "mammoth", specifier = ">=1.9.0" },
{ name = "markitdown", extras = ["all"], specifier = ">=0.1.1" },
{ name = "msal", specifier = ">=1.32.3" },