email-cli-tool 0.1.0__tar.gz

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,24 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ publish:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ id-token: write
12
+
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - uses: astral-sh/setup-uv@v5
17
+ with:
18
+ version: "latest"
19
+
20
+ - name: Build package
21
+ run: uv build
22
+
23
+ - name: Publish to PyPI
24
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,30 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - uses: astral-sh/setup-uv@v5
20
+ with:
21
+ version: "latest"
22
+
23
+ - name: Set up Python ${{ matrix.python-version }}
24
+ run: uv python install ${{ matrix.python-version }}
25
+
26
+ - name: Install dependencies
27
+ run: uv sync --python ${{ matrix.python-version }}
28
+
29
+ - name: Run tests
30
+ run: uv run --python ${{ matrix.python-version }} pytest -v
@@ -0,0 +1,7 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .venv/
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+ .pytest_cache/
@@ -0,0 +1 @@
1
+ 3.14
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ClaymanTwinkle
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.
@@ -0,0 +1,155 @@
1
+ Metadata-Version: 2.4
2
+ Name: email-cli-tool
3
+ Version: 0.1.0
4
+ Summary: A simple CLI tool for sending emails with plain text, HTML, and file attachments
5
+ Project-URL: Homepage, https://github.com/ClaymanTwinkle/email-cli-tool
6
+ Project-URL: Repository, https://github.com/ClaymanTwinkle/email-cli-tool
7
+ Project-URL: Issues, https://github.com/ClaymanTwinkle/email-cli-tool/issues
8
+ Author: ClaymanTwinkle
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: attachments,cli,email,smtp
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Communications :: Email
22
+ Requires-Python: >=3.10
23
+ Requires-Dist: click>=8.0
24
+ Requires-Dist: pyyaml>=6.0
25
+ Description-Content-Type: text/markdown
26
+
27
+ # email-cli-tool
28
+
29
+ > A simple CLI tool for sending emails with plain text, HTML, and file attachments.
30
+ >
31
+ > [中文文档](README_CN.md)
32
+
33
+ ## Features
34
+
35
+ - Send plain text / HTML / mixed format emails
36
+ - Attach multiple files and images
37
+ - Multiple recipients support
38
+ - Direct SMTP connection (SSL / STARTTLS)
39
+ - Interactive configuration wizard
40
+ - Read body content from stdin
41
+
42
+ ## Installation
43
+
44
+ ```bash
45
+ # From PyPI
46
+ pip install email-cli-tool
47
+
48
+ # Or with uv
49
+ uv tool install email-cli-tool
50
+ ```
51
+
52
+ ## Quick Start
53
+
54
+ ### 1. Initialize Configuration
55
+
56
+ ```bash
57
+ emailcli init
58
+ ```
59
+
60
+ Follow the prompts to enter your SMTP settings. Example for Gmail:
61
+
62
+ | Field | Value |
63
+ |-------|-------|
64
+ | From address | `yourname@gmail.com` |
65
+ | SMTP host | `smtp.gmail.com` |
66
+ | SMTP port | `465` |
67
+ | SMTP username | `yourname@gmail.com` |
68
+ | SMTP password | App password |
69
+ | Encryption | `ssl` |
70
+
71
+ ### 2. Send Emails
72
+
73
+ ```bash
74
+ # Plain text
75
+ emailcli send --to user@example.com --subject "Hello" --body "Hello World"
76
+
77
+ # HTML format
78
+ emailcli send --to user@example.com --subject "Notice" \
79
+ --html "<h1>Title</h1><p>Body content</p>"
80
+
81
+ # With attachments
82
+ emailcli send --to user@example.com --subject "Report" \
83
+ --body "Please see attachments" \
84
+ --attach report.pdf \
85
+ --attach photo.png
86
+
87
+ # Multiple recipients
88
+ emailcli send \
89
+ --to a@example.com \
90
+ --to b@example.com \
91
+ --subject "Broadcast" --body "Hello everyone"
92
+
93
+ # HTML body from file
94
+ emailcli send --to user@example.com --subject "Newsletter" \
95
+ --html-file template.html
96
+
97
+ # Read body from stdin
98
+ echo "Content" | emailcli send \
99
+ --to user@example.com --subject "Piped" --body -
100
+ ```
101
+
102
+ ## Command Reference
103
+
104
+ ### `emailcli send`
105
+
106
+ | Option | Required | Repeatable | Description |
107
+ |--------|:--------:|:----------:|-------------|
108
+ | `--to` | ✅ | ✅ | Recipient email address |
109
+ | `--subject` | ✅ | | Email subject |
110
+ | `--body` | | | Plain text body, `-` reads from stdin |
111
+ | `--html` | | | HTML body string (mutually exclusive with `--html-file`) |
112
+ | `--html-file` | | | Read HTML body from file (mutually exclusive with `--html`) |
113
+ | `--attach` | | ✅ | Attachment file path |
114
+ | `--from` | | | Override sender address from config |
115
+
116
+ > At least one of `--body`, `--html`, or `--html-file` is required.
117
+
118
+ ### `emailcli init`
119
+
120
+ Interactively create the configuration file at `~/.emailcli/config.yaml`.
121
+
122
+ ### `emailcli config show`
123
+
124
+ Display current configuration (password is masked).
125
+
126
+ ## Configuration
127
+
128
+ Path: `~/.emailcli/config.yaml`
129
+
130
+ ```yaml
131
+ from: yourname@gmail.com
132
+ smtp:
133
+ host: smtp.gmail.com
134
+ port: 465
135
+ username: yourname@gmail.com
136
+ password: your-app-password
137
+ encryption: ssl # ssl | starttls | none
138
+ ```
139
+
140
+ ## Development
141
+
142
+ ```bash
143
+ # Install dependencies
144
+ uv sync
145
+
146
+ # Run tests
147
+ uv run pytest -v
148
+
149
+ # Run locally
150
+ uv run emailcli --help
151
+ ```
152
+
153
+ ## License
154
+
155
+ MIT
@@ -0,0 +1,129 @@
1
+ # email-cli-tool
2
+
3
+ > A simple CLI tool for sending emails with plain text, HTML, and file attachments.
4
+ >
5
+ > [中文文档](README_CN.md)
6
+
7
+ ## Features
8
+
9
+ - Send plain text / HTML / mixed format emails
10
+ - Attach multiple files and images
11
+ - Multiple recipients support
12
+ - Direct SMTP connection (SSL / STARTTLS)
13
+ - Interactive configuration wizard
14
+ - Read body content from stdin
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ # From PyPI
20
+ pip install email-cli-tool
21
+
22
+ # Or with uv
23
+ uv tool install email-cli-tool
24
+ ```
25
+
26
+ ## Quick Start
27
+
28
+ ### 1. Initialize Configuration
29
+
30
+ ```bash
31
+ emailcli init
32
+ ```
33
+
34
+ Follow the prompts to enter your SMTP settings. Example for Gmail:
35
+
36
+ | Field | Value |
37
+ |-------|-------|
38
+ | From address | `yourname@gmail.com` |
39
+ | SMTP host | `smtp.gmail.com` |
40
+ | SMTP port | `465` |
41
+ | SMTP username | `yourname@gmail.com` |
42
+ | SMTP password | App password |
43
+ | Encryption | `ssl` |
44
+
45
+ ### 2. Send Emails
46
+
47
+ ```bash
48
+ # Plain text
49
+ emailcli send --to user@example.com --subject "Hello" --body "Hello World"
50
+
51
+ # HTML format
52
+ emailcli send --to user@example.com --subject "Notice" \
53
+ --html "<h1>Title</h1><p>Body content</p>"
54
+
55
+ # With attachments
56
+ emailcli send --to user@example.com --subject "Report" \
57
+ --body "Please see attachments" \
58
+ --attach report.pdf \
59
+ --attach photo.png
60
+
61
+ # Multiple recipients
62
+ emailcli send \
63
+ --to a@example.com \
64
+ --to b@example.com \
65
+ --subject "Broadcast" --body "Hello everyone"
66
+
67
+ # HTML body from file
68
+ emailcli send --to user@example.com --subject "Newsletter" \
69
+ --html-file template.html
70
+
71
+ # Read body from stdin
72
+ echo "Content" | emailcli send \
73
+ --to user@example.com --subject "Piped" --body -
74
+ ```
75
+
76
+ ## Command Reference
77
+
78
+ ### `emailcli send`
79
+
80
+ | Option | Required | Repeatable | Description |
81
+ |--------|:--------:|:----------:|-------------|
82
+ | `--to` | ✅ | ✅ | Recipient email address |
83
+ | `--subject` | ✅ | | Email subject |
84
+ | `--body` | | | Plain text body, `-` reads from stdin |
85
+ | `--html` | | | HTML body string (mutually exclusive with `--html-file`) |
86
+ | `--html-file` | | | Read HTML body from file (mutually exclusive with `--html`) |
87
+ | `--attach` | | ✅ | Attachment file path |
88
+ | `--from` | | | Override sender address from config |
89
+
90
+ > At least one of `--body`, `--html`, or `--html-file` is required.
91
+
92
+ ### `emailcli init`
93
+
94
+ Interactively create the configuration file at `~/.emailcli/config.yaml`.
95
+
96
+ ### `emailcli config show`
97
+
98
+ Display current configuration (password is masked).
99
+
100
+ ## Configuration
101
+
102
+ Path: `~/.emailcli/config.yaml`
103
+
104
+ ```yaml
105
+ from: yourname@gmail.com
106
+ smtp:
107
+ host: smtp.gmail.com
108
+ port: 465
109
+ username: yourname@gmail.com
110
+ password: your-app-password
111
+ encryption: ssl # ssl | starttls | none
112
+ ```
113
+
114
+ ## Development
115
+
116
+ ```bash
117
+ # Install dependencies
118
+ uv sync
119
+
120
+ # Run tests
121
+ uv run pytest -v
122
+
123
+ # Run locally
124
+ uv run emailcli --help
125
+ ```
126
+
127
+ ## License
128
+
129
+ MIT
@@ -0,0 +1,129 @@
1
+ # email-cli-tool
2
+
3
+ > 一个简洁的命令行邮件发送工具,支持纯文本、HTML 和文件附件。
4
+ >
5
+ > [English](README.md)
6
+
7
+ ## 功能特性
8
+
9
+ - 发送纯文本 / HTML / 混合格式邮件
10
+ - 携带多个文件和图片附件
11
+ - 支持多收件人
12
+ - SMTP 直连(支持 SSL / STARTTLS)
13
+ - 交互式配置向导
14
+ - 从 stdin 读取正文内容
15
+
16
+ ## 安装
17
+
18
+ ```bash
19
+ # 从 PyPI 安装
20
+ pip install email-cli-tool
21
+
22
+ # 或使用 uv
23
+ uv tool install email-cli-tool
24
+ ```
25
+
26
+ ## 快速开始
27
+
28
+ ### 1. 初始化配置
29
+
30
+ ```bash
31
+ emailcli init
32
+ ```
33
+
34
+ 按提示输入 SMTP 信息。以网易 163 邮箱为例:
35
+
36
+ | 配置项 | 值 |
37
+ |--------|-----|
38
+ | From address | `yourname@163.com` |
39
+ | SMTP host | `smtp.163.com` |
40
+ | SMTP port | `465` |
41
+ | SMTP username | `yourname@163.com` |
42
+ | SMTP password | 授权码(非登录密码) |
43
+ | Encryption | `ssl` |
44
+
45
+ ### 2. 发送邮件
46
+
47
+ ```bash
48
+ # 纯文本
49
+ emailcli send --to user@example.com --subject "你好" --body "Hello World"
50
+
51
+ # HTML 格式
52
+ emailcli send --to user@example.com --subject "通知" \
53
+ --html "<h1>标题</h1><p>正文内容</p>"
54
+
55
+ # 携带附件
56
+ emailcli send --to user@example.com --subject "报告" \
57
+ --body "请查收附件" \
58
+ --attach report.pdf \
59
+ --attach photo.png
60
+
61
+ # 多个收件人
62
+ emailcli send \
63
+ --to a@example.com \
64
+ --to b@example.com \
65
+ --subject "群发" --body "大家好"
66
+
67
+ # 从文件读取 HTML 正文
68
+ emailcli send --to user@example.com --subject "Newsletter" \
69
+ --html-file template.html
70
+
71
+ # 从 stdin 读取正文
72
+ echo "邮件内容" | emailcli send \
73
+ --to user@example.com --subject "Piped" --body -
74
+ ```
75
+
76
+ ## 命令参考
77
+
78
+ ### `emailcli send`
79
+
80
+ | 参数 | 必填 | 可重复 | 说明 |
81
+ |------|:----:|:------:|------|
82
+ | `--to` | ✅ | ✅ | 收件人邮箱 |
83
+ | `--subject` | ✅ | | 邮件主题 |
84
+ | `--body` | | | 纯文本正文,`-` 从 stdin 读取 |
85
+ | `--html` | | | HTML 正文(与 `--html-file` 互斥) |
86
+ | `--html-file` | | | 从文件读取 HTML(与 `--html` 互斥) |
87
+ | `--attach` | | ✅ | 附件文件路径 |
88
+ | `--from` | | | 覆盖配置中的发件人地址 |
89
+
90
+ > `--body` 和 `--html` / `--html-file` 至少提供一个。
91
+
92
+ ### `emailcli init`
93
+
94
+ 交互式创建配置文件 `~/.emailcli/config.yaml`。
95
+
96
+ ### `emailcli config show`
97
+
98
+ 查看当前配置(密码已脱敏)。
99
+
100
+ ## 配置文件
101
+
102
+ 路径:`~/.emailcli/config.yaml`
103
+
104
+ ```yaml
105
+ from: yourname@163.com
106
+ smtp:
107
+ host: smtp.163.com
108
+ port: 465
109
+ username: yourname@163.com
110
+ password: your-auth-code
111
+ encryption: ssl # ssl | starttls | none
112
+ ```
113
+
114
+ ## 开发
115
+
116
+ ```bash
117
+ # 安装依赖
118
+ uv sync
119
+
120
+ # 运行测试
121
+ uv run pytest -v
122
+
123
+ # 本地运行
124
+ uv run emailcli --help
125
+ ```
126
+
127
+ ## License
128
+
129
+ MIT