outlook-cli-rs 0.2.3__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,255 @@
1
+ Metadata-Version: 2.4
2
+ Name: outlook-cli-rs
3
+ Version: 0.2.3
4
+ Classifier: Development Status :: 3 - Alpha
5
+ Classifier: Environment :: Console
6
+ Classifier: Intended Audience :: Developers
7
+ Classifier: Intended Audience :: End Users/Desktop
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Operating System :: OS Independent
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Rust
12
+ Classifier: Topic :: Communications :: Email
13
+ Classifier: Topic :: Office/Business :: Scheduling
14
+ License-File: LICENSE
15
+ Summary: Microsoft Outlook from your terminal, for humans and agents
16
+ Home-Page: https://github.com/rvben/outlook-cli
17
+ License-Expression: MIT
18
+ Requires-Python: >=3.8
19
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
20
+ Project-URL: Homepage, https://github.com/rvben/outlook-cli
21
+ Project-URL: Issues, https://github.com/rvben/outlook-cli/issues
22
+ Project-URL: Repository, https://github.com/rvben/outlook-cli
23
+
24
+ # outlook-cli
25
+
26
+ Microsoft Outlook from your terminal—for humans and agents.
27
+
28
+ `outlook-cli` is an early Rust CLI for Outlook mail and calendars through the
29
+ supported Microsoft Graph API, with an optional classic Outlook desktop backend
30
+ for Windows and WSL. It aims to provide calm terminal workflows for
31
+ people and a deterministic, introspectable command contract for automation.
32
+
33
+ ## Current milestone
34
+
35
+ - Work/school and personal Microsoft accounts through delegated OAuth
36
+ - Tokens protected by the operating system credential store
37
+ - Mail listing, reading, search, sending, replying, moving, deletion, and read-state updates
38
+ - Draft lifecycle and attachment upload/download up to 150 MiB
39
+ - Calendar agenda and event creation
40
+ - Text output on a terminal and JSON when piped
41
+ - Read-only profiles, bounded collections, stable errors, and CLI Spec v0.3
42
+
43
+ ## Build
44
+
45
+ ```console
46
+ cargo build
47
+ cargo test --locked --all-targets
48
+ ```
49
+
50
+ Windows tests also execute the bundled PowerShell bridge against mock Outlook
51
+ objects, without accessing a mailbox. On other platforms this test can be run
52
+ with a portable PowerShell installation:
53
+
54
+ ```console
55
+ OUTLOOK_TEST_POWERSHELL=/path/to/pwsh cargo test --test desktop_bridge -- --ignored
56
+ ```
57
+
58
+ ## Install
59
+
60
+ ```console
61
+ cargo install outlook-cli --locked
62
+ # or, using a prebuilt wheel (supported platforms below)
63
+ uv tool install outlook-cli-rs
64
+ ```
65
+
66
+ Both packages install the `outlook` executable.
67
+
68
+ Starting with 0.2.3, PyPI wheels cover Windows x64, macOS Intel/Apple Silicon,
69
+ and Linux x64/ARM64 (glibc 2.17+ or musl 1.2+). WSL uses the Linux wheel.
70
+ These wheels contain the compiled executable, so Rust is not needed to install
71
+ or run them. Other platforms require Rust and native build tools to build the
72
+ source distribution. To require a prebuilt package and fail instead of compiling:
73
+
74
+ ```sh
75
+ uv tool install --no-build outlook-cli-rs
76
+ ```
77
+
78
+ See [the release process](docs/releases.md) for the build matrix and publication checks.
79
+
80
+
81
+ ## Configure
82
+
83
+ `outlook-cli` includes a maintained multitenant Microsoft Entra public-client
84
+ registration, so the normal setup is simply:
85
+
86
+ ```console
87
+ outlook init
88
+ ```
89
+
90
+ The registration requests delegated Microsoft Graph permissions only:
91
+ `User.Read`, `Mail.ReadWrite`, `Mail.Send`, and `Calendars.ReadWrite`. A
92
+ read-only profile requests `Mail.Read` and `Calendars.Read` instead.
93
+
94
+ For a staged or headless setup:
95
+
96
+ ```console
97
+ outlook init --no-login
98
+ outlook auth login
99
+ ```
100
+
101
+ Read-only profiles also block remote writes locally:
102
+
103
+ ```console
104
+ outlook init --read-only
105
+ ```
106
+
107
+ Organizations with restrictive consent policies can use their own public-client
108
+ registration. Enable public client flows and supply its Application (client) ID:
109
+
110
+ ```console
111
+ outlook init --client-id YOUR_APPLICATION_ID
112
+ ```
113
+
114
+ The same override is available through `OUTLOOK_CLIENT_ID`. Tenant policy can
115
+ still require administrator approval, and the maintained registration is not
116
+ yet publisher verified while the project is in its early development phase.
117
+
118
+ For short-lived automation, `OUTLOOK_ACCESS_TOKEN` overrides stored
119
+ credentials.
120
+
121
+ ## Classic Outlook on Windows / WSL
122
+
123
+ Use the same executable with a desktop profile:
124
+
125
+ ```console
126
+ outlook init --profile local --backend desktop
127
+ outlook --profile local inbox --limit 10
128
+ outlook --profile local mail folders
129
+ outlook --profile local mail folders --parent inbox
130
+ outlook --profile local mail list --folder sentitems
131
+ outlook --profile local mail search 'quarterly report' --limit 20
132
+ outlook --profile local mail read MESSAGE_ID
133
+ outlook --profile local doctor
134
+ ```
135
+
136
+ Requires **classic Outlook**, a configured and signed-in Windows Outlook profile,
137
+ and `powershell.exe` on PATH. From WSL, Windows executable interop must be enabled.
138
+ New Outlook does not support COM/OOM or MAPI. See Microsoft's
139
+ [Outlook feature comparison](https://support.microsoft.com/en-us/outlook/getstarted/feature-comparison-between-new-outlook-and-classic-outlook).
140
+
141
+ Desktop initialization checks the connection; `--no-login` saves a profile without
142
+ launching Outlook, including when preparing configuration on another platform.
143
+ Authentication is managed in Windows Outlook. No Graph OAuth registration or token
144
+ is used. `auth status` verifies desktop access; `auth status --offline` only reports
145
+ configuration and leaves sign-in state unknown. `doctor --offline` checks platform
146
+ and PowerShell availability without launching Outlook.
147
+
148
+ The CLI uses Outlook's active Windows profile and default store. A CLI profile
149
+ selects the backend; it does **not** switch the Windows Outlook profile or account.
150
+ Well-known folders resolve in the default store. `mail folders` lists its top-level
151
+ mail folders; use `--parent` with a returned ID to browse further. Supported names
152
+ are `inbox`, `sentitems`, `deleteditems`, `outbox`, `drafts`, and `junkemail`.
153
+
154
+ Desktop supports folder and message listing, reading, search, send, reply/reply-all,
155
+ move, delete, mark-read/unread, and draft list/create/update/send/delete. Attachments,
156
+ calendar commands, and `whoami` return `unsupported`. Read-only profiles block writes;
157
+ deleting messages or drafts requires confirmation (or `--yes`).
158
+
159
+ New messages and replies use plain text and Outlook's configured sending account.
160
+ A successful send means Outlook accepted the message for sending; offline Outlook
161
+ may queue it. Draft updates preserve omitted fields; `--clear-to`, `--clear-cc`,
162
+ and `--clear-bcc` remove the corresponding recipients. Draft update/send/delete
163
+ reject sent messages and messages already submitted for sending. Moves return the
164
+ message's new desktop ID; use that ID for subsequent commands. Delete follows
165
+ Outlook's behavior, including permanent deletion from Deleted Items. If a write
166
+ times out or the bridge fails, check Outlook before retrying: it may have completed.
167
+ There is no automatic fallback to Graph. Existing profiles without a backend field
168
+ continue to use Graph, which remains the default for `init`.
169
+
170
+ Desktop search is **case-insensitive literal text** in subject, sender name, or
171
+ sender address, limited to one folder (inbox by default). KQL and regular expressions
172
+ are not interpreted. Sender addresses may be Exchange legacy addresses as exposed
173
+ by Outlook. Results reflect the desktop client's available/synchronized data.
174
+
175
+ Text output includes copyable message IDs and continuation tokens; JSON exposes
176
+ the same values as structured fields. Desktop IDs encode
177
+ both EntryID and StoreID, are unrelated to Graph IDs, and can change after moves.
178
+ Pages scan at most 1,000 items or about 30 seconds before returning a continuation;
179
+ a search page can be empty with more items still to scan. Pass `--cursor` with the
180
+ same command, folder, and query to continue. Pagination uses item positions, so
181
+ mailbox changes between calls can cause skipped or repeated results. Restart listing
182
+ after switching the Windows Outlook profile or account.
183
+
184
+ The bundled PowerShell bridge receives input as JSON on stdin, returns JSON, and
185
+ releases COM references without quitting Outlook. The CLI waits up to 45 seconds;
186
+ Outlook may show Windows profile or security prompts. A timeout terminates the
187
+ local bridge process, but WSL interop can leave a Windows-side process or prompt
188
+ running; inspect Windows if a call times out.
189
+
190
+ ## Commands
191
+
192
+ ```console
193
+ outlook inbox --limit 20
194
+ outlook mail folders
195
+ outlook mail read MESSAGE_ID
196
+ outlook mail search 'subject:"quarterly report"' --limit 20
197
+ outlook mail mark-read MESSAGE_ID
198
+ printf 'All set.' | outlook mail reply MESSAGE_ID --body -
199
+ outlook mail send --to person@example.com --bcc archive@example.com \
200
+ --subject 'Hello' --body 'Hi'
201
+ outlook mail move MESSAGE_ID --destination archive
202
+ outlook mail delete MESSAGE_ID --yes
203
+ outlook mail draft create --to person@example.com --subject 'Report' --body 'Attached.'
204
+ outlook mail attachment add DRAFT_ID ./report.pdf --content-type application/pdf
205
+ outlook mail attachment list DRAFT_ID
206
+ outlook mail attachment download MESSAGE_ID ATTACHMENT_ID ./report.pdf
207
+ outlook mail draft send DRAFT_ID
208
+ outlook calendar agenda --start 2026-09-03T00:00:00Z --end 2026-09-10T00:00:00Z
209
+ outlook calendar create --subject 'Project sync' \
210
+ --start 2026-09-04T09:00:00 --end 2026-09-04T09:30:00 \
211
+ --timezone Europe/Amsterdam --attendee person@example.com
212
+ outlook auth status # verify the selected credential
213
+ outlook auth status --offline # inspect local credential state only
214
+ outlook profile list
215
+ outlook profile use work
216
+ outlook profile remove old --yes
217
+ outlook config show
218
+ outlook config path
219
+ outlook doctor --offline
220
+ outlook schema --command 'mail send'
221
+ ```
222
+
223
+ Graph message and event requests opt into immutable Outlook IDs. Remote
224
+ writes are blocked when the active profile is read-only. Destructive commands
225
+ confirm on a terminal and require `--yes` in automation. Attachment downloads
226
+ never overwrite unless `--force` is supplied; uploads switch automatically to
227
+ Microsoft's resumable upload sessions at 3 MiB. Stdout contains data;
228
+ diagnostics and sign-in instructions go to stderr.
229
+
230
+ ## Terminal experience
231
+
232
+ Run `outlook` in a terminal for a quick-start guide. Mail lists show full subjects,
233
+ sender details, unread and attachment indicators, and copyable IDs. Message reading
234
+ includes recipients and preserves body paragraphs. Folders show total and unread
235
+ counts; attachments show readable sizes; agendas include timezone and location
236
+ when supplied by the backend. Paginated text output includes the next cursor,
237
+ including when a desktop search returns an empty page with more items to scan.
238
+
239
+ Headings use a restrained cyan accent on terminals. Set `NO_COLOR=1` or pass
240
+ `--no-color` to disable colors. Redirected text has no color escapes. Mail views
241
+ remove terminal control sequences from remote content before displaying it.
242
+
243
+ ```console
244
+ outlook inbox --output text # Readable output even when redirected
245
+ outlook inbox --output json # Structured records for scripts
246
+ outlook --no-color mail read MESSAGE_ID
247
+ ```
248
+
249
+ ## Status
250
+
251
+ The command surface is under active development. A keyboard-first TUI, rich
252
+ HTML composition, inline attachments, meeting responses, contacts, and delta
253
+ synchronization are planned after the core Graph and authentication contracts
254
+ settle.
255
+
@@ -0,0 +1,6 @@
1
+ outlook_cli_rs-0.2.3.data/scripts/outlook.exe,sha256=2Y_7-TPwUNN6budR-qHWpvbLL7W5RdLk3BRl6Kb1aTU,7790080
2
+ outlook_cli_rs-0.2.3.dist-info/METADATA,sha256=PoGefPcEMRVZsvTVBmH1nHlCWicB9PKkWkjOsf2w3oY,11358
3
+ outlook_cli_rs-0.2.3.dist-info/WHEEL,sha256=8Aej0W0a6Cz6apA3IzJrTnxLRVLAt-w0Oh8SA3Con_c,94
4
+ outlook_cli_rs-0.2.3.dist-info/licenses/LICENSE,sha256=IrYrkBMtR8lAb3HipBoQD7qwhnT-cegq0tbzg4V6d6k,1102
5
+ outlook_cli_rs-0.2.3.dist-info/sboms/outlook-cli.cyclonedx.json,sha256=PwN8Whu8ncVlr5RYQfFG4KdB-ys43l-FkGtsxLKRyuo,198673
6
+ outlook_cli_rs-0.2.3.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: maturin (1.15.0)
3
+ Root-Is-Purelib: false
4
+ Tag: py3-none-win_amd64
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 outlook-cli contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.