14个版本
0.2.4 | 2021年12月6日 |
---|---|
0.2.3 | 2021年5月3日 |
0.2.2 | 2021年1月7日 |
0.2.1 | 2020年5月17日 |
0.1.4 | 2019年11月26日 |
#339 in 邮件
每月358次下载
81KB
785 行
milter
milter库为libmilter(sendmail邮件过滤器API)提供了Rust绑定。
这个库用于创建milters:可以与MTA(邮件服务器)如Postfix集成的邮件过滤应用程序。
要求
此crate需要可用的milter C库(libmilter)。
☞ 在Debian和Ubuntu上,安装包libmilter-dev
。
如果您的发行版没有提供libmilter的pkg-config元数据,请在执行构建时尝试使用提供的milter.pc
文件
PKG_CONFIG_PATH=. cargo build
此crate的集成测试需要第三方miltertest
实用程序来执行测试milter。此程序可在OpenDKIM命令行工具中找到。
☞ 在Debian和Ubuntu上,安装miltertest
或opendkim-tools
包(仅当在milter crate本身上工作时需要)。
最低支持的Rust版本是1.42.0。
用法
此库的主要用例是创建milter应用程序,即带有main
函数的可执行程序。
在Cargo.toml
中包含libc和milter
[dependencies]
milter = "0.2"
libc = "0.2"
以下是一个简单但完整的milter应用程序,它记录客户端IP地址
use milter::{on_connect, Context, Milter, Status};
use std::net::SocketAddr;
fn main() {
Milter::new("unix:/run/ipmilter.sock")
.name("IPMilter")
.on_connect(connect_callback)
.run()
.expect("milter execution failed");
}
#[on_connect(connect_callback)]
fn handle_connect(
_: Context<()>,
_: &str,
socket_addr: Option<SocketAddr>,
) -> Status {
if let Some(socket_addr) = socket_addr {
println!("connect from {}", socket_addr.ip());
}
Status::Continue
}
有关完整用法说明,请参阅API文档
示例
此包包括一个名为inspect
的milter示例,它打印每个阶段的所有参数和宏,因此可以立即作为查看milter操作方式和接收数据的形状的有用工具。
通过传递一个未使用的端口号的套接字规范来启动inspect
示例(如果您的发行版没有提供所需的pkg-config元数据,您可能需要调整PKG_CONFIG_PATH
,见上文)
cargo run --example inspect inet:3000@localhost
启动milter后,配置MTA - Postfix - 以连接到它。将以下参数添加到/etc/postfix/main.cf
中,并重新加载Postfix配置
smtpd_milters = inet:localhost:3000
non_smtpd_milters = $smtpd_milters
然后inspect
milter将打印它从Postfix接收的所有内容。
许可
版权所有 © 2019–2021 David Bürgin
本程序是免费软件:您可以在自由软件基金会发布的GNU通用公共许可证的条款下重新分发和/或修改它,许可证版本为3或(根据您的选择)任何更高版本。
依赖项
~1.5MB
~39K SLoC