28 个版本 (15 个稳定版)
新 1.0.14 | 2024 年 8 月 16 日 |
---|---|
1.0.13 | 2024 年 6 月 3 日 |
1.0.12 | 2024 年 4 月 9 日 |
1.0.8 | 2024 年 3 月 14 日 |
0.5.1 | 2023 年 9 月 26 日 |
#22 in 电子邮件
每月 307 次下载
用于 6 个 crate(4 个直接使用)
155KB
3.5K SLoC
📫 MIME 元语言
Rust 实现的 Emacs MIME 消息元语言,即 MML。
此库公开了一个 MML 到 MIME 消息编译器和 MIME 到 MML 消息解释器。有关更多信息,请参阅 API 文档。
例如
From: alice@localhost
To: bob@localhost
Subject: MML examples
This is a plain text part.
<#part type=text/html>
<h1>This is a HTML part.</h1>
<#/part>
<#part description="This is an attachment." filename=./examples/attachment.png><#/part>
编译为
MIME-Version: 1.0
From: <alice@localhost>
To: <bob@localhost>
Subject: MML examples
Message-ID: <17886a741feef4a2.f9706245cd3a3f97.3b41d60ef9e2fbfb@soywod>
Date: Tue, 26 Sep 2023 09:58:26 +0000
Content-Type: multipart/mixed;
boundary="17886a741fef2cb2_97a7dbff4c84bbac_3b41d60ef9e2fbfb"
--17886a741fef2cb2_97a7dbff4c84bbac_3b41d60ef9e2fbfb
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
This is a plain text part.
--17886a741fef2cb2_97a7dbff4c84bbac_3b41d60ef9e2fbfb
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 7bit
<h1>This is a HTML part.</h1>
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="attachment.png"
Content-Transfer-Encoding: base64
iVBORw0KGgo…
--17886a741fef2cb2_97a7dbff4c84bbac_3b41d60ef9e2fbfb--
定义
来自 Emacs 文档
创建 MIME 消息既无聊又复杂。因此,定义了一个名为 mml 的库,它解析称为 MML(MIME 元语言)的语言,并生成 MIME 消息。
MML 语言非常简单。它看起来有点像 SGML 应用程序,但并非如此。
MML 的主要概念是部分。每个部分可以是不同的类型或使用不同的字符集。通过使用 ‘<#part ...>’ 标签来界定部分。可以使用 ‘<#multipart ...>’ 标签引入多部分。通过 ‘<#/part>’ 或 ‘<#/multipart>’ 标签结束部分。以 ‘<#part ...>’ 标签开始的部分也通过下一个打开标签关闭。
[…]
每个标签可以包含零个或多个形式为 ‘parameter=value’ 的参数。值可以括在引号内,但除非值包含空格,否则不是必需的。因此,‘filename=/home/user/#hello$^yes’ 是完全有效的。
功能
- 使用
MmlCompilerBuilder
(需要 cargo 功能compiler
,默认启用)将 MML 编译成 MIME 消息 - 使用
MimeInterpreterBuilder
(需要 cargo 功能interpreter
,默认启用)将 MIME 解释为 MML 消息 - 支持多个部分
<#multipart>…<#/multipart>
- 内联部分支持
<#part text=mime/type>…<#/part>
- 附件支持
<#part disposition=attachment filename=/path/to/attachment.ext><#/part>
- 注释支持
<#!part>This will not be compiled<#!/part>
- PGP 支持
- Shell 命令(需要 cargo 功能
pgp-commands
) - GPG 绑定(需要 cargo 功能
pgp-gpg
和gpgme
库) - 原生 Rust 实现(需要 cargo 功能
pgp-native
)
- Shell 命令(需要 cargo 功能
示例
参见 ./examples
cargo run --example
开发
开发环境由 Nix 管理。运行 nix-shell
将启动一个包含开始使用 lib 所需一切的 shell:cargo
、cargo-watch
、rust-bin
、rust-analyzer
等。
# Start a Nix shell
$ nix-shell
# then build the lib
$ cargo build -p mml-lib
贡献
在 SourceHut 上有可用的 错误追踪器。[发送电子邮件]
在 SourceHut 上有可用的 邮件列表。[发送电子邮件] [订阅] [退订]
如果您想 报告一个错误,请通过 ~soywod/[email protected] 发送电子邮件。
如果您想 提出一个功能 或 修复一个错误,请通过 ~soywod/[email protected] 发送补丁。发送补丁的最简单方法是使用 git send-email,按照 此指南 配置 git。
如果您只是想 讨论 项目,请自由加入 Matrix 工作空间 #pimalaya 或直接联系我 @soywod。您还可以使用邮件列表。
赞助
特别感谢 NLnet 基金会 和 欧洲委员会,他们帮助项目从 2022 年的 NGI Assure 和 2023 年的 NGI Zero Entrust 获得财务支持。
- NGI Assure 在 2022 年
- NGI Zero Entrust 在 2023 年
如果您欣赏这个项目,请自由使用以下任何一种方式捐赠
依赖项
~1–16MB
~217K SLoC