在 MTA (sendmail) 上而不是在 MUA 上添加用户签名

在 MTA (sendmail) 上而不是在 MUA 上添加用户签名

在我们有一个带有 Outlook/Thunderbird 客户端和 Linux 服务器的本地网络的情况下sendmail:是否可以使用一些sendmail's milter修改传入邮件以将发件人的签名添加到他/她发送的邮件中?将签名集中在服务器中可能会很有用。

步骤如下:

1) 用户撰写邮件并发送。 MUA 设置了一些稍后要替换的“签名”魔术文本,即:“ x-replace-signature-x”,因此必须将 MUA 配置为在用户想要的位置添加该签名(在引用文本下方或在回复下方)

2) 邮件到达sendmail's MSP队列

3)Sendmail从“”头中取出用户名From,即[email protected]

4)Sendmail在文件系统中查找该用户的签名html(可能包含嵌入的图像),即/var/lib/sendmail/signatures/user1.html

5) 米尔特查找“ x-replace-signature-x”并用以下内容替换该行/var/lib/sendmail/signatures/user.html

6)sendmail's MTA发送邮件(在我的例子中发送到智能主机)。

我不知道这样的功能,所以这就是为什么我正在考虑使用正则表达式匹配的 milter。

答案1

正如 @thrig 所建议的,MIMEDefang 是可行的方法,虽然任务繁重,但恕我直言,非常值得付出努力。

大多数filter_end()人都会使用以下功能之一:

append_text_boilerplate($entity, $boilerplate, $all)  
append_html_boilerplate($entity, $boilerplate, $all)  

虽然这些附加文本而不是替换它。要准确执行您指定的操作,您可以使用filter_part()处理程序。一种方法是调用action_external_filter()您想要修改的部分(没有 MIME 配置的第一个 text/plain 和 text/html 部分通常是一个不错的选择)。这通过外部命令过滤该部分。要将图像添加到 HTML,您需要将它们添加为新部分,然后引用它们(通过 CID)。

修改消息的正常方法是调用 。这并不replace_entire_message()filter_end()听起来那么简单,您需要将当前消息复制为 MIME::Entity,修改部分正文,并将整个消息正文替换为新的 MIME::实体。

这应该可以帮助您开始: https://stuff.mit.edu/~jik/software/mailman_mimedefang/

或者,一个低技术解决方案是使用 sendmail spool(-odd延迟传递)而不是立即传递,修改排队的 df 文件(将其视为纯文本有时可能有效,但为了彻底,您需要将其视为 MIME),移动qf/df 对连接到一个新的正常运行的线轴(re-mqueue.pl也许有)。

相关内容