你的电子邮件客户端是否允许你通过编程方式添加自定义头?

12

我正在从事一个反垃圾邮件项目(Centmail),其中需要发送方使用一个客户端插件,添加一个自定义标头(和一个签名,但那部分比较容易)。一般的问题是在你的外发邮件中添加一个电子邮件标头,在这个标头字段的内容对于每个邮件都是动态确定的。

令人惊讶的是,Pine/Alpine似乎无法做到这一点。Pine允许您为外发邮件指定一个过滤器脚本,但只有正文而不是标题通过它传递。当然,您可以在Pine设置中定义自定义头,但我看不到任何动态更改其内容的方法。

如果我对Pine的了解不正确的话,希望能听到如何在其他电子邮件客户端(Thunderbird、Outlook、Evolution、Mutt等)上实现这一点。谢谢!


我越来越确定我的Pine不是错的。它实际上有一个选项(_INCLUDEALLHDRS_)可以将头部传递给出站过滤器脚本,但它仍然不允许脚本更改实际发送的电子邮件中的头部。 - dreeves
既然这是提供赏金的第一个问题之一,它不应该是一个社区维基,而应该是一个“普通”的问题,对吧? - Hosam Aly
这个问题变成社区 Wiki 有什么赏金方面的后果吗?这是非常讽刺的:我将其标记为 CW,因为在 StackOverflow 上开始使用之前,我并不知道它会对声望产生什么影响。而且,在赏金说明提到“得票最高的答案”之前,我就已经发布了一个大赏金。 - dreeves
这个赏金怎么会变成550,当限制是500呢? - skiphoppy
@skiphoppy:SO添加了50的奖励,所以有效范围是100到550。 - Michael Myers
显示剩余4条评论
12个回答

27

Mozilla的解决方案是否适用于实际上以编程方式更新每封发送的电子邮件的自定义标题字段的内容? - dreeves

20

尽管严格意义上并不是插件,但您可以制作一个代理SMTP服务器来修改电子邮件,例如类似于AVG发送电子邮件扫描器的东西。这样做的好处是可以与许多电子邮件客户端一起使用;您还可以制作一个插件,该插件将在一侧与代理通信,在另一侧与电子邮件用户界面通信。


5

我同意Piskvor的观点。我会将其实现为代理SMTP服务器,这样可以获得许多好处:

  1. 您不会受到任何一个电子邮件客户端的限制,因此不会受到其API的限制(如果有的话)
  2. 它可以应用于邮件服务器端,因此可以消除安装和部署方面的问题

5

Thunderbird插件Enigmail可以控制发出邮件的头部信息,这证明在Thunderbird中实现这一功能是可行的。


4

Emacs可以通过编程实现此功能。您可以创建一个缓冲区(get-buffer-create),填充它的头部信息,并以非交互方式调用mail-send(将mail-interactive设置为nil)。

使用与mail-send一起使用的缓冲区内容示例(头+正文):

From: "Toto" <toto@toto.net>
To: somebody@somewhere.net
Subject: Something
BCC: sebastien.rocca-serra@f4-group.com
--text follows this line--

Hello, how are you?

您还可以通过在mail-send-hook中添加钩子来更改每个发出的电子邮件(标题+正文)。


3

2

我从Brain tunes的旧部分挖掘出了这个...

我认为的方法是通过配置SENDMAIL并通过[bash / etc]脚本执行如果我理解正确的话

根文件 http://snap.nlc.dcccd.edu/reference/sysadmin/julian/ewtoc.html

SendMail配置

头声明 http://snap.nlc.dcccd.edu/reference/sysadmin/julian/ch04/061-064.html#Heading22

http://snap.nlc.dcccd.edu/reference/sysadmin/julian/ch04/078-080.html

头行的格式由H行定义。此行的语法为

H[c ?c mflagsc ?]c hnamec: c htemplate

在此规范中,连续行直接插入输出消息中。在将htemplate插入消息之前,将展开宏。如果扩展为空,则不包括标题行。如果指定了mflags(用问号括起来),则必须在此标题的邮件程序定义中声明至少一个指定的标志才能自动输出。如果其中一个标题在输入中,则无论这些标志如何,它都会被定向到输出。

特殊标题行几个标题行具有配置文件定义的特殊解释。其他人则具有内置于sendmail中的解释,不能更改而不更改代码。内置功能在以下列表中描述:

• Return-Receipt-To:如果发送此标题,则在完成最终传送时将向任何指定的名称发送消息。邮件程序必须在邮件程序描述符中设置l标志(本地传递)。 • Errors-To:如果在处理过程中发生错误,则此标题将错误消息发送给列出的名称,而不是发送者。对于邮件列表,请使用此标题行,以便将错误返回给列表管理员。 • To:如果收件人在消息中没有列出(在To:,CC:或BCC:行中),则sendmail会为每个在sendmail命令行上指定的收件人添加“显然发送”标题行。


1
我想到了一个问题,既然Pine是开源的,如果这个功能对你很重要,你可以尝试为该项目做出贡献以添加此功能。

如果你这样做,你就完全可以获得这个问题的赏金! :) - dreeves

1

你可能想要研究一下使用伪头而不是头文件。因为pine/alpine允许您指定一个过滤程序来处理电子邮件,所以您可以在开头将头文件添加到正文中,这应该很容易处理。但我不确定它是否完全符合您的目的,因为我不知道您正在构建什么类型的系统。

我是通过Debian BTS System了解到伪头的。

回答这个问题,我使用GMail,你无法通过编程方式编辑头文件(我很想看到一个能够让你这样做的Webmail)。甚至不能过滤自定义头文件,如X-List,这非常令人恼火。


1

将邮件客户端插入自定义标头的总体想法存在问题。

因为有太多的客户端,包括不同版本和不同系统。

标头+正文格式的好处是所有非用户、服务器和路由特定数据都对用户隐藏。这个想法很重要,应该遵循。我认为用户不应该被一些自定义的、与服务器相关的标头所困扰。

此外,您试图附加的数据实际上是用户特定数据,例如签名。它验证了发件人的有效性。没有理由向用户隐藏它。

电子邮件数据的签名是众所周知的过程,由PGP、SMIME等使用。允许这种操作(通过外部程序进行验证和签名)的邮件客户端可能比允许添加或修改自定义邮件标头的客户端更多。

自定义标头应该由邮件服务器修改;用户数据应该由邮件客户端处理。

我认为您应该将数据放在消息或消息部分中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接