8 个版本 (重大更新)

0.8.0 2022年7月27日
0.7.0 2020年2月16日
0.6.0 2019年3月29日
0.5.0 2018年6月27日
0.1.1 2016年12月7日

#153电子邮件 类别中

每月22 次下载

MIT/Apache

64KB
1.5K SLoC

Mailstrom

文档

Mailstrom 是一个 Rust 库,用于在后台工作线程中处理 Rust 程序的电子邮件投递。它执行以下操作

  • 接收调用者提供的电子邮件,并执行所有必要的操作以将其投递给所有收件人,而不会阻塞调用者。
  • 允许调用者在任何时间查询之前提交的电子邮件的状态,以确定它是否已排队、已投递、已延迟或已失败,并提供每个收件人的详细信息。
  • 处理电子邮件内容和标题的解析、验证和编码,符合 RFC 5322(以及其他 RFC)。为此使用 email-format 库。
  • 通过配置的 SMTP 中继投递,或者通过查找每个收件人的 DNS MX 记录直接将邮件发送到收件人的邮件服务器。使用 trust-dns 库进行 DNS 查询。
  • 通过 lettre 库执行 SMTP 传输的“重负载”。在可用的情况下使用 STARTTLS。
  • 在发送结果为延迟时,使用指数退避策略进行固定次数的重试(目前固定为 3 次)
  • 使用可插拔的用户自定义状态管理(持久性)层。

限制

  • email-format 包还不够完整且略显笨拙。它还没有包含 RFC 6854(更新后的 From 和 Sender 语法)。它将类型一对一地与 ABNF 解析单元定义,而不是作为具有意义的语义单元。而且它还不允许使用明显的类型,例如使用 DateTime 类型设置日期。然而,这些问题将在不久的将来得到解决。

许可证

以下任一许可证下授权

由您选择。

贡献

除非您明确说明,否则您根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,将按照上述方式双授权,不附加任何其他条款或条件。

如何避免您的电子邮件被标记为垃圾邮件

Mailstrom通过符合RFC5322规范并在每封电子邮件中包含一个Message-Id报头,帮助确保您的电子邮件能够成功投递。

您对此负有主要责任。Gmail支持的此链接非常有帮助。另外,

  • 发送时使用一致的IP地址。
  • 如果可能,让您的IP地址的反向DNS指向您发送电子邮件的域名。对于Gmail,在通过IPv6发送时,这绝对必要。
  • 发送时使用一致的Helo名称。
  • 使用一致的发件人电子邮件地址。
  • 发布一个SPF TXT记录,或者更好的是,使用至少1024位的密钥使用DKIM签名电子邮件消息。
  • 发布一个DMARC策略。
  • 不要发送垃圾邮件内容。不要发送钓鱼邮件。主题应与正文相关。
  • 允许您的用户通过回复或通过链接退订。最好提供指向退订URL的“List-Unsubscribe”电子邮件标题。
  • 自动退订地址多次投递邮件的用户。
  • 如果是批量发送,必须在“Precedence: bulk”标题字段中。
  • 通过不同的发件人地址,甚至是不同的IP地址和发送域名,将促销电子邮件与事务性电子邮件分开。如果您的促销材料被分类为垃圾邮件,至少事务性电子邮件仍然会成功投递。

依赖关系

~11–21MB
~322K SLoC