1 个不稳定版本
0.1.0 | 2020 年 8 月 14 日 |
---|
#1520 在 解析实现
87KB
1.5K SLoC
Enqueue Email (ɪnˈkjuː)
目录
描述
这是一个 CLI 工具和库,它以各种方式接受 URL,检索 HTML 页面标题,并创建、排队和发送带有该 URL 和标题的电子邮件。
背景
为了将电子邮件地址(或邮件列表)用作“书签系统”,或者简单地满足一个强迫症档案管理员的渴望。
免责声明:该项目几乎对除了其作者以外的任何人都没有什么用处。因此,它应该被认为是一个玩具项目。
功能
- 从命令行选项或读取当前剪贴板获取输入。
- 可通过环境变量进行配置。
- 可以排队电子邮件或触发每个调用的排队。
《参考文献》文档对使用的库、技术文档和实现给出了适当的认可。
待办事项列表和计划
查看 TODO
文件以了解当前和未来的开发、想法和功能概述。
先决条件
- 具有运行 X Window System 服务器的类 Unix 操作系统,用于读取系统剪贴板。
- 网络连接打开,允许 HTTPS、DNS 和 SMTP 流量,以解析 URL、检索页面内容并发送电子邮件。
msmtp
"msmtp - SMTP 客户端" (marlam.de/msmtp) 已安装并配置。msmtp version 1.8.3 Platform: x86_64-pc-linux-gnu TLS/SSL library: GnuTLS Authentication library: GNU SASL Supported authentication methods: plain scram-sha-1 external gssapi cram-md5 digest-md5 login ntlm IDN support: enabled NLS: enabled, LOCALEDIR is /usr/share/locale Keyring support: none System configuration file name: /etc/msmtprc
msmtpq
和msmtp-queue
都可在$PATH
中使用。## msmtpq : queue funtions to both use & manage the msmtp queue, ## as it was defined by Martin Lambers ## Copyright (C) 2008 - 2015 Chris Gianniotis ## msmtp-queue : wrapper script for msmtpq ## to expose the management functions ## for the msmtp queue ## Copyright (C) 2011 Chris Gianniotis
- 对目录
$HOME/.msmtp.queue/
的可写访问权限,以保存排队的电子邮件为生成的文件的配对$ file $HOME/.msmtp.queue/* /home/user/.msmtp.queue/1595792128.mail: news or mail, ASCII text /home/user/.msmtp.queue/1595792128.msmtp: ASCII text
- 构建项目:Rust 和 Cargo "2018" 版本。
使用方法
从 CLI --帮助
enqueue-email 0.1.0
EnqueueEmail
Pass an URL using one of the options available (clipboard, full URL or a
combination of the URL parts, and enqueue an email, ready to be spooled
by msmtp-queue.
SETUP:
The following environment variables are required:
ENQUEUE_MAIL_FROM, ENQUEUE_MAIL_TO, ENQUEUE_MAIL_CC [optional], ENQUEUE_MAIL_FCC [in the format "provider/folder"]
USAGE:
enqueue-email [FLAGS] [OPTIONS]
FLAGS:
-c, --clipboard
Use the URL currently on the top of the Clipboard. This option disables all the other defined options
--help
Prints help information
-r, --run
Run msmt-queue and flush all mail currently in queue. This wraps the command 'msmtp-queue -r'
-V, --version
Prints version information
OPTIONS:
--cafile <cafile>
A file with a certificate authority chain, allows to connect to certificate authories not included in the
default set
-d, --domain <domain>
The domain to connect to. This may be different from the host!
-f, --fragment <fragment>
An optional fragment component preceded by a hash (#)
-h, --host <host>
The host to connect to
-t, --path <path>
The path component in the URI. This follows the definitions of RFC2396 and RFC3986
(https://en.wikipedia.org/wiki/Uniform_Resource_Identifier) [default: /]
-p, --port <port>
The port to connect to [default: 443]
-q, --query <query>
An optional query component preceded by a question mark (?), containing a query string of non-hierarchical
data
-s, --scheme <scheme>
The scheme protocol of the URI [default: https]
-u, --url <url>
The URL to bookmark and enqueue. This excludes scheme, host, port and domain. This option has the priority
over the Clipboard
示例
让我们展示一些示例,从空的 SMTP 队列开始
$ msmtp-queue
no mail in queue
所有示例都是在环境变量 RUST_LOG
设置为 INFO
级别的情况下运行的,以便显示欣赏结果所需的最小输出。
让我们打印剪贴板的内容,并将具有相同内容和关联网页标题的电子邮件入队
$ echo "$(xclip -o --selection clipboard)"
https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
$ RUST_LOG=INFO enqueue-email --clipboard
[2020-07-27T20:56:55Z INFO enqueue_email] page title: Simple Mail Transfer Protocol - Wikipedia
还有两种其他选项可以用来保存和入队链接:明确地使用完整且格式良好的 URL (--url
) 或使用其组件的组合(例如,--host
和 --path
)。
$ RUST_LOG=INFO enqueue-email --url https://wikipedia.org/wiki/Unix
[2020-07-27T20:57:58Z INFO enqueue_email] page title: Unix - Wikipedia
$ RUST_LOG=INFO enqueue-email --host en.wikipedia.org --path /wiki/Free_and_open-source_software
[2020-07-27T20:59:49Z INFO enqueue_email] page title: Free and open-source software - Wikipedia
此时期望的结果是在本地队列中有 3 条消息
$ msmtp-queue
mail num=[ 1 ] id=[ 1595883415 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Simple Mail Transfer Protocol - Wikipedia
mail num=[ 2 ] id=[ 1595883478 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Unix - Wikipedia
mail num=[ 3 ] id=[ 1595883589 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Free and open-source software - Wikipedia
当我们将满意时,可以直接使用 msmtp-queue
工具发送特定电子邮件(-R
)或发送所有(-r
)
$ msmtp-queue -R
mail num=[ 1 ] id=[ 1595883415 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Simple Mail Transfer Protocol - Wikipedia
mail num=[ 2 ] id=[ 1595883478 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Unix - Wikipedia
mail num=[ 3 ] id=[ 1595883589 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Free and open-source software - Wikipedia
enter mail number or id to send
( <cr> alone to exit ) ..: 1
send :
mail num=[ 1 ]
id=[ 1595883415 ]
ok [Y/n] ..:
mail [ 1 ] [ 1595883415 ] from queue ; send was successful ; purged from queue
--------------------------------------------------
mail num=[ 1 ] id=[ 1595883478 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Unix - Wikipedia
mail num=[ 2 ] id=[ 1595883589 ]
From: user <[email protected]>
To: list <[email protected]>
Subject: [link] Free and open-source software - Wikipedia
enter mail number or id to send
( <cr> alone to exit ) ..:
$ msmtp-queue -r
mail [ 1 ] [ 1595883478 ] from queue ; send was successful ; purged from queue
mail [ 2 ] [ 1595883589 ] from queue ; send was successful ; purged from queue
如果您想立即从 enqueue-email
触发投递,可以在其中添加 --run
选项来触发 msmtp-queue
-r run (flush) mail queue - all mail in queue
最后一个示例展示了 --run
选项。重要的是要注意,使用 --run
将触发邮件队列的刷新,包括所有等待的消息,而不仅仅是队列中的最后一条。
$ RUST_LOG=INFO enqueue-email --url https://en.wikipedia.org/wiki/Email --run
[2020-07-27T21:02:52Z INFO enqueue_email] page title: Email - Wikipedia
mail [ 1 ] [ 1595883772 ] from queue ; send was successful ; purged from queue
限制
- 仅支持 HTTPS。
- 标题提取仅在存在 HTML 标题标签(
<title>...</title>
)时才有效;动态生成的页面可能没有标题。 - 主机解析将不超过 10 个 HTTP 重定向(3**)响应。
配置
所有配置都应从环境变量中获取。这些选项控制消息格式中的头部,如 消息格式 所定义,在 RFC-3864 中。
ENQUEUE_MAIL_FROM
:From:电子邮件地址,以及作者(们)的姓名(可选)。ENQUEUE_MAIL_TO
:电子邮件地址(们),以及消息接收者(们)的姓名(可选)。指示主要接收者(允许多个),对于次要接收者,请参阅下面的 Cc:ENQUEUE_MAIL_CC
:抄送;许多电子邮件客户端根据它们是否在 To: 或 Cc: 列表中而以不同的方式标记收件箱中的电子邮件。ENQUEUE_MAIL_FCC
:要附加发送消息副本的文件名(来自 Emacs 邮件头)。ENQUEUE_MAIL_ACCOUNT
:格式为 "provider/folder"。
可选地,可以使用 RUST_LOG
调整在 STDOUT
中记录的消息。
构建和安装
项目分为库(enqueuemail
)和二进制文件(enqueue-email
)。
应该使用 Cargo 来方便地构建和安装;这里引用了 cargo-build 和 cargo-install。
$ rustup toolchain install --profile default --allow-downgrade --component cargo,clippy,rustfmt,rust-docs,rust-src nightly
$ cargo build
$ cargo fmt
$ cargo clippy
...
Cargo 功能
live-tests
:使用此功能启用测试套件的一个子集,该测试套件需要互联网连接(用于 URL 主机解析)并运行测试覆盖率的完整计算。它对tests
模块之外没有其他影响。
开发
本项目的开发过程中应始终考虑的一些知名/最佳实践已在CONTRIBUTING文档中介绍。
许可
许可证为以下之一
- Apache License, Version 2.0 (LICENSE-APACHE 或 LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 MIT)
您可自行选择。
贡献
除非您明确声明,否则您有意提交以包含在本作品中的任何贡献,根据Apache-2.0许可证定义,均应双许可如上,不附加任何额外条款或条件。
依赖关系
~23–35MB
~668K SLoC