客户端正在使用Outlook / Exchange中的“延迟传递”function。 由于某些原因,这个特性不会像RFC-822 Date:头一样保留原始的消息创build时间(即,当用户点击“发送”button时),所以即使消息的传送确实是“延迟”,头仍然承受这是在交付之前已经写好的证据。 我的客户希望将Date:标题设置为消息实际上离开Exchange组织的时间,所以它看起来像是最近编写和发送的。
解决此问题的想法是将所有传出SMTP邮件上的Date:标头设置为Exchange 2007环境中服务器的当前时间。
我知道我可以使用-Action参数设置一个新的Transportrule,设置为Microsoft.Exchange.MessagingPolicies.Rules.Tasks.SetHeaderAction,并定义用不同的值replace“Date”。 但是,我看不到在这里使用像Get-Date这样的函数的dynamic返回值的方法 – Get-Date的结果最好被转换为它在执行new-Transportrule cmdlet时的静态值。
lambdaexpression式/闭包将执行所需的function(即不插入一个静态值,但一个函数指针,并在每次运行重新评估expression式),但据我所知,Powershell不支持这些。
一个丑陋的解决方法将是一个非常频繁的重新定义(如每分钟一次)的传输规则与更新的当前时间,但我想避免这一点,如果一个更优雅的解决scheme是可用的。
任何想法呢?
编辑为了简要说明为什么使用该function:客户想发送包含决定结果的邮件,该结果在某个date之前不能公开。 另外,他还想隐瞒决定时的date/时间,以防止不必要的讨论。
这实际上是MUA的function(Outlook支持这个开箱即用),但服务器支持当然是一个额外的好处,因为即使客户端没有运行,邮件也会被发送。 还有这样的问题:在向服务器发送消息时,MUA设置“Date:”头,服务器在释放等待队列时不会改变它。 Outlook中曾经有两个function执行类似的function – 一个叫做“延期交付”,一个叫做“延期提交”。 显然,后者就是这里所需要的,但是它已经在Outlook 2000中被删除了,并且从未被重新引入 – 可能是因为Outlook团队正试图向苹果学习。
将Outlook客户端设置为在连接时不立即发送。 他们撰写邮件并像往常一样点击发送。 该消息位于其发件箱中。 当他们“实际”想要发送消息时,只需从发件箱中打开它,然后再次单击发送,就会重新标记消息。 然后在Outlook中进行发送/接收。 标题中没有可以看到原始构图date/时间的证据。 另外(也许是一个更好的解决scheme),只需撰写并保存在草稿中的邮件,然后发送它,当你真的要发送它…
我知道,这不是一个解决scheme,就像您所描述的,您希望在全局服务器级别为所有消息,但更多的解决scheme为客户端。 如果有很多这样的信息要这样做的话,这会变得非常烦人,但是一个星期/几个月对他们来说也不会太糟糕。 来自客户端的奇怪要求…“发送消息,但不要实际发送消息,直到我这么说…”如果你不想发送消息,不要点击发送button…
另一种可能是甚至不使用Outlook发送邮件,在记事本中撰写邮件,以支持的格式将其保存为eml文件,然后编写脚本将其放到Exchange服务器上的Pickup文件夹中的相应date/时间交付。
我知道这不能回答你的问题。 而且我不期望upvotes,但没有downvotes。
延期交付是一个错误的devisefunction。 它减轻了人们的思维。 他们可以打“发送”,然后想一想,说:“哦,我想撤消'发送'”。 但应该是“想”,然后“发送”或“取消”。 “回收站”问题也出现了同样的问题。 有人发明了这个可怕的function,现在你可以在任何地方看到它。 而人民不再想。 先删除,然后想想为什么删除是一个错误。 目前大家抱怨为什么没有回收站的一切。 (与某人结婚然后询问撤销button在哪里)。
但是这个function还有另一个心理问题。 现在大家都认为电子邮件是一个即时通讯媒介(不是!)。 当点击发送button时,邮件应该到达收件人。 由于大多数邮件都是如此,至less在几秒钟内,引入延迟的一切都是不便的。 客户端的延期交付以及接收方的灰名单造成了这种不便。
我不知道包含这个function的邮件服务器。 可能是因为没有必要。 在我看来,这不是 MTA的一部分。 这应该是MUA的工作。 在(新创build的)邮件发送到中继主机之前,客户端应该提供一个确认对话框:“你真的想发送这个邮件吗?请在点击'yes'之前查看。[YES] [[NO]]”一个CAPTCHA。
说这个,你应该考虑修改Outlook而不是Exchange来做到这一点。
我现在还不能testing这个,但是我记得在我工作的最后一个地方,我们运行的是Exchange 2007和Outlook 2010.我们实际上遇到了另一个相关的问题,因为处于caching模式的Outlook的笔记本电脑上的用户使用了这个function,除非客户端正在运行并连接到VPN或办公室,否则不会交付。 我们追踪到,如果客户端运行在caching模式下,那么行为就像延期提交; 邮件位于客户端的发件箱而不是服务器。 结果是客户必须在适当的时候公开提交,时间戳是提交时间。
如果我没有记错,而且行为没有改变,那么这可能会奏效。