#postfix #milter #smtp #sendmail #api-bindings

rmilter

一个仅使用Rust的crate,用于连接和使用milter功能

2个不稳定版本

0.2.0 2020年11月24日
0.1.0 2020年9月29日

#315 in 电子邮件

Apache-2.0

42KB
676

rmilter

rmilter 是一个Rust crate,允许通过milter协议连接到sendmail或postfix等MTA服务。

这个库使用纯安全的Rust代码,不需要像libmilter这样的外部库。

特性

  • 使用milter协议连接到MTA服务(目前仅支持IPv4/IPv6)
  • 定义哪些消息应该被传输
  • 自动解码 base64quoted-printable
  • 使用Rust的类型系统来防止滥用milter协议

用法

这个crate在 crates.io 上,可以通过将 rmilter 添加到项目 Cargo.toml 中的依赖项来使用。

[dependencies]
rmilter = "0.1"

示例

use rmilter::accept_reject_action::AcceptRejectAction;
use rmilter::message_handler::MessageHandler;
use rmilter::milter_message::MilterProtocol;
use rmilter::milter_builder::MilterBuilder;

struct MyMessageHandler {}

impl MessageHandler for MyMessageHandler {
   fn header(&mut self, name: &str, value: &str) -> AcceptRejectAction {
       println!("name: {}, value: {}", name, value);
       AcceptRejectAction::Continue
   }
}

fn main() {
   let mut handler = MyMessageHandler {};
   let protocol = MilterProtocol::new(false, false, false, false, false, false, false);
   let mut milter = MilterBuilder::new(&mut handler)
       .set_protocol(protocol)
       .build();

   milter
       .run("127.0.0.1:31337")
       .expect("Failed to start milter");
}

状态

rmilter 可以用于连接到MTA服务并接收消息。也可以轻松地接受或拒绝邮件(使用AcceptRejectAction)。

目前,不支持操纵邮件的功能(如添加标题、收件人等),但在未来的版本中将会支持。

依赖项

~7MB
~180K SLoC