m365-mail
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMicrosoft 365 Mail
Microsoft 365 Mail
CLI tool for Microsoft 365 email via Microsoft Graph API.
一款通过Microsoft Graph API操作Microsoft 365邮件的CLI工具。
Setup (One-time)
初始化设置(一次性操作)
1. Register Entra ID App
1. 注册Entra ID应用
- Go to Entra ID Portal → App registrations → New registration
- Name: (or whatever)
m365mail-cli - Supported account types: "Accounts in this organizational directory only"
- Redirect URI: Leave blank (using device code flow)
- Click Register
- 访问 Entra ID门户 → 应用注册 → 新注册
- 名称:(或自定义名称)
m365mail-cli - 支持的账户类型:“仅限此组织目录中的账户”
- 重定向URI:留空(使用设备代码流)
- 点击“注册”
2. Configure API Permissions
2. 配置API权限
- In your app → API permissions → Add a permission
- Microsoft Graph → Delegated permissions
- Add: ,
Mail.ReadWriteMail.Send - Click "Grant admin consent" (or have admin do it)
- 在你的应用中 → API权限 → 添加权限
- 选择Microsoft Graph → 委派权限
- 添加:、
Mail.ReadWriteMail.Send - 点击“授予管理员同意”(或联系管理员完成此操作)
3. Enable Public Client Flow
3. 启用公共客户端流
- In your app → Authentication
- Under "Advanced settings", set "Allow public client flows" to Yes
- Save
- 在你的应用中 → 身份验证
- 在“高级设置”下,将“允许公共客户端流”设置为是
- 保存设置
4. Note Your IDs
4. 记录相关ID
- Application (client) ID: Found on app Overview page
- Directory (tenant) ID: Found on app Overview page
- 应用程序(客户端)ID:在应用概览页面查看
- 目录(租户)ID:在应用概览页面查看
5. Install & Configure
5. 安装与配置
bash
undefinedbash
undefinedInstall dependencies
Install dependencies
pip install msal requests
pip install msal requests
Make executable
Make executable
chmod +x skills/m365-mail/scripts/m365mail.py
chmod +x skills/m365-mail/scripts/m365mail.py
Optional: symlink to PATH
Optional: symlink to PATH
ln -s $(pwd)/skills/m365-mail/scripts/m365mail.py /usr/local/bin/m365mail
ln -s $(pwd)/skills/m365-mail/scripts/m365mail.py /usr/local/bin/m365mail
Configure
Configure
m365mail setup --client-id <YOUR_CLIENT_ID> --tenant-id <YOUR_TENANT_ID>
m365mail setup --client-id <YOUR_CLIENT_ID> --tenant-id <YOUR_TENANT_ID>
Authenticate (opens browser for device code)
Authenticate (opens browser for device code)
m365mail auth
undefinedm365mail auth
undefinedCommands
命令说明
List Inbox
列出收件箱邮件
bash
m365mail inbox # Last 20 messages
m365mail inbox -n 50 # Last 50 messages
m365mail inbox -u # Unread only
m365mail inbox -v # With preview
m365mail inbox --json # JSON outputbash
m365mail inbox # 最近20条消息
m365mail inbox -n 50 # 最近50条消息
m365mail inbox -u # 仅显示未读消息
m365mail inbox -v # 包含消息预览
m365mail inbox --json # 以JSON格式输出Read Message
读取消息
bash
m365mail read <message_id> # Full message
m365mail read <id> --max-length 500 # Truncate body
m365mail read <id> --json # JSON outputbash
m365mail read <message_id> # 完整消息内容
m365mail read <id> --max-length 500 # 截断消息正文
m365mail read <id> --json # 以JSON格式输出Search
搜索邮件
bash
m365mail search "quarterly report" # Full-text search
m365mail search -f boss@company.com # From specific sender
m365mail search -u # Unread only
m365mail search -a # Has attachments
m365mail search "budget" -f cfo@co.com -u # Combine filtersbash
m365mail search "quarterly report" # 全文搜索
m365mail search -f boss@company.com # 搜索特定发件人的邮件
m365mail search -u # 仅搜索未读邮件
m365mail search -a # 搜索包含附件的邮件
m365mail search "budget" -f cfo@co.com -u # 组合多个筛选条件Send Email
发送邮件
bash
m365mail send --to user@example.com --subject "Hello" --body "Message body"
m365mail send --to a@x.com b@x.com --cc c@x.com --subject "Hi" --body "Text"
m365mail send --to user@x.com --subject "Report" --body-file report.txt
m365mail send --to user@x.com --subject "HTML" --body "<h1>Hi</h1>" --htmlbash
m365mail send --to user@example.com --subject "Hello" --body "Message body"
m365mail send --to a@x.com b@x.com --cc c@x.com --subject "Hi" --body "Text"
m365mail send --to user@x.com --subject "Report" --body-file report.txt
m365mail send --to user@x.com --subject "HTML" --body "<h1>Hi</h1>" --htmlManage Messages
管理消息
bash
m365mail folders # List all folders
m365mail move <message_id> Archive # Move to folder
m365mail move <message_id> "Deleted Items"
m365mail delete <message_id> # Permanently delete
m365mail mark <message_id> --read # Mark read
m365mail mark <message_id> --unread # Mark unreadbash
m365mail folders # 列出所有文件夹
m365mail move <message_id> Archive # 将消息移动到指定文件夹
m365mail move <message_id> "Deleted Items"
m365mail delete <message_id> # 永久删除消息
m365mail mark <message_id> --read # 标记为已读
m365mail mark <message_id> --unread # 标记为未读Output Formats
输出格式
- Default: Human-readable table/text
- : Machine-readable JSON (use for programmatic access)
--json - /
-v: Include message preview--verbose
- 默认:易读的表格/文本格式
- :机器可读的JSON格式(用于程序化访问)
--json - /
-v:包含消息预览内容--verbose
Message IDs
消息ID
Messages are identified by long IDs like . Commands accept:
AAMkAGI2...- Full ID
- ID prefix (first 8+ chars usually unique)
The inbox/search output shows prefixes for easy reference.
[AAMkAGI2]消息由类似的长ID标识。命令支持:
AAMkAGI2...- 完整ID
- ID前缀(通常前8个及以上字符即可唯一标识)
收件箱/搜索结果会显示前缀,方便快速引用。
[AAMkAGI2]Token Storage
令牌存储
Tokens cached at :
~/.m365mail/- - Client/tenant IDs
config.json - - OAuth tokens (auto-refreshes)
token_cache.json
令牌缓存存储在目录下:
~/.m365mail/- - 客户端/租户ID
config.json - - OAuth令牌(自动刷新)
token_cache.json
Troubleshooting
故障排除
"No cached token": Run
m365mail authPermission denied: Ensure Mail.ReadWrite and Mail.Send permissions are granted (may need admin consent)
Token expired: Tool auto-refreshes; if issues persist, run again
m365mail auth“无缓存令牌”:运行
m365mail auth权限被拒绝:确保已授予Mail.ReadWrite和Mail.Send权限(可能需要管理员同意)
令牌过期:工具会自动刷新令牌;若问题持续,重新运行
m365mail auth