#postfix #smtp #sendmail #api-bindings #mail-server

milter

对 sendmail milter 库的绑定

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 邮件

Download history 60/week @ 2024-03-13 46/week @ 2024-03-20 48/week @ 2024-03-27 75/week @ 2024-04-03 3/week @ 2024-04-10 9/week @ 2024-04-17 28/week @ 2024-04-24 58/week @ 2024-05-01 61/week @ 2024-05-08 164/week @ 2024-05-15 74/week @ 2024-05-22 7/week @ 2024-05-29 16/week @ 2024-06-05 66/week @ 2024-06-12 157/week @ 2024-06-19 119/week @ 2024-06-26

每月358次下载

GPL-3.0-or-later

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上,安装miltertestopendkim-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