摘要
- RFC 5230 为 Sieve 增加了生成新邮件的动作:回复发往原邮件的信封发件人,并记录这个地址是否已在一段时间内收到过同一回复。
- 真正决定回复对象与频率的,不只是那段休假文案;还包括本人收件资格、回复如何被判为“同一条”、防循环邮件头和受站点限制的等待时间。
不在状态也会影响别人
休假自动回复看起来无伤大雅,因为往往只有一两句话。可它代表用户主动向外发送消息,发送时未逐一征求收件人的同意。它可能泄露某人不在办公室,也可能回复邮件列表,或者在两个无人值守的系统之间来回弹跳。标准必须回答的不只是说什么,还有何时不说。
2008 年,RFC 5230 为 Sieve 这门刻意受限的邮件过滤语言加入 vacation。脚本可以说明某位用户暂时无法及时回复,并让解释器生成另一封新邮件。这是 Sieve 第一个能够创建全新消息的扩展。它的后果不再只是把来信放进某个文件夹:一条过滤规则能够启动新的对话,而对方的系统还可能继续回应。
回复目标是原邮件的 SMTP 信封发件人(MAIL FROM;若 Sieve 在最终投递后运行,通常可以从 Return-Path 取到),而非单靠邮件界面上的 From 栏。自动回复本身应使用空的信封发件人;如果支持投递状态通知扩展,标准建议请求失败时不再产生另一条通知。Auto-Submitted 邮件头标记自动生成。日期、发件人、收件人和线程字段则让这封信如实呈现为新生成的回复。
一个地址、一种回复、一段间隔
最容易被忽略的是它如何记忆。扩展会按发件地址追踪一段时间内已发出的回复。对方在用户离开时再次来信,不意味着系统必须每封都重复同样的话。:days 可设定抑制间隔;省略时默认值为七天与站点最低值两者中的较大值。站点可以规定正数最低间隔和最高间隔,超界输入会被压回允许范围。因此脚本写下的数字,不一定等于实际采用的时长。
这不是一个全局的“已经休假”开关。系统记住的是某个地址是否收到过某一种回复。显式的 :handle 可以给多条 vacation 语句指定同一个回复身份;如果没有 handle,身份由 :subject、:from、:mime 和正文组合推导。同一人可以先后收到针对不同情境的不同说明,而相同参数的分支会共享抑制记录。若脚本使用 RFC 5229 的变量,标准要求在回复追踪前不要先展开参数:身份依据写下的命令参数,而不是每次运行时才变化的字符串。
于是,等待时间其实是一张很小的政策表。它的键同时包含发件地址和回复身份。这样的区分能挡住无意义的重复,也能让新的、不同的说明继续到达。脚本作者决定哪些消息算同一种回答,运营方则限制它最频繁可以发到什么程度。
休假信必须寄给正确的人
RFC 5230 要求只有在用户地址出现在 To、Cc、Bcc 或相应的 Resent 字段中时才回复。服务端可以从账户资料、最终信封收件人,或脚本里的 :addresses 列表识别别名。对于拥有多个地址的用户,这个补充列表很有用;但经过转发或子地址处理后,想列全所有地址可能并不现实。
标准还为自动化流程和列表消息设置了保护。实现必须维护一份禁止接收休假回复的地址清单,建议包含常见守护进程与列表管理地址;对于带有列表管理邮件头的消息,以及 Auto-Submitted 值不是 no 的消息,通常不应回复。实现还可以依据邮件头或内容判断回复是否不合适。这些规则并不保证每个服务器都能识别所有机器或列表:部分地址仍由实现自行决定,且安全性取决于服务端能观察到什么。
更广泛的自动回复建议早在 2004 年就写入 RFC 3834。RFC 5230 明确说 vacation 扩展遵循那套 personal responder 建议。后来标准继续补足边界:RFC 6131 加入 :seconds,其中零表示每封都回复;RFC 6133 展示 presence 与地址簿条件如何组合;RFC 8580 则允许把已生成的回复存入本地邮箱。这些文本显示设计如何扩展,不代表实际部署有多普遍。
新邮件不只是正文
RFC 5230 允许使用 UTF-8 和 MIME,包括多语言备选版本。脚本可以依据邮件头选择语言,但标准提醒,简单字符串判断容易被复杂字段误导。它还指出,回复的正式程度可能取决于对方是同事还是陌生人,而不只是对方使用哪种语言。选出一段文案,本身就是对受众作判断。
vacation 的权限有限:一个脚本至多执行一次,不能和 reject 或 refuse 组合,也不会取消 Sieve 的默认 keep。这些条件交代了它在过滤语言中的位置,但不是 RFC 3028 那篇关于动作选择的总体论点。RFC 5230 的独特设计在于:一封新的外发邮件应该去哪里、什么算同一回复、带哪些邮件头,以及多久后才可重发。
史料能够证明的是规范如何设计,而不是它在所有系统中都能安全运行。服务器未必知道一封邮件是否只写给本人,也未必能确认被转发的别名是否属于同一账户。标准只能围绕可观察到的信号加上有限记忆,约束看似简单的自动化。休假信从来不只是保存好的句子:它是一次有对象、有时限的发送授权。
来源
- RFC 5230 — Sieve Vacation Extension
- RFC Editor:RFC 5230 记录
- Datatracker:RFC 5230 历史
- RFC 3834 — Recommendations for Automatic Responses to Electronic Mail
- RFC Editor:RFC 3834 记录
- RFC 5228 — Sieve Email Filtering Language
- RFC 5229 — Sieve Variables Extension
- RFC 6131 — Sieve Vacation Seconds Parameter
- RFC Editor:RFC 6131 记录
- RFC 6133 — Presence Information with Auto-Responder Functionality
- RFC Editor:RFC 6133 记录
- RFC 8580 — Sieve Extension: FCC
- RFC 2142 — Mailbox Names for Common Services, Roles and Functions
- RFC 2919 — List-Id Header Field
- RFC 2369 — URLs as Meta-Syntax for Mail-List Commands
- RFC 3461 — SMTP Service Extension for Delivery Status Notifications
- RFC 5322 — Internet Message Format
- RFC 5230 勘误
- Heng Lu — 运行代码优先
- Heng Lu — 最小初始规范
- Heng Lu — 现实层次
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
