我们正在将一些应用程序整合到我正在编写的新应用程序中。每个应用程序都有一个(或多个)电子邮件地址,可以处理来自的电子邮件。我们想要做的是将每个原始电子邮件地址转发到一个新的集中地址,然后根据最初发送的位置以不同方式处理电子邮件。
我们连接的服务器是Exchange 2003,我正在使用IMAP(AE.Net.Email)来获取电子邮件。
似乎我可以浏览标题并查找Received标题,但我不确定它是否可靠。我知道有些邮件系统专门为此添加了一个标题,但它看起来并不像我们的那样。
那么我可以通过IMAP查看我还没有看到的内容吗?我们可以在Exchange中做些什么来确保添加标头吗?或者将电子邮件发送到不同的文件夹?有没有办法做一个类似于GMail的用户名+keyword@host.com?
答案 0 :(得分:2)
一般情况下,您无法判断电子邮件是否已在邮箱之间重定向,别名,转发或移动。在SMTP的世界中,将电子邮件向前移动到其目的地的每个操作或多或少等同于对SMTP信封收件人地址的修改或重写。此类操作可以是从电子邮件别名到通过邮件列表传递到用户配置的转发规则的任何操作。一些MTA甚至被设计为使这一事实非常明确:例如,Sendmail的配置文件中最重要的部分只是一组基于模式匹配和替换的规则,它们指定了电子邮件的信封接收者如何以迭代方式进行文本重写。
话虽如此,当电子邮件通过系统时,可以在标题中留下痕迹,这些标题提供了信封收件人过去早些时候的信息。但是这里没有标准也没有保证。
正如您所知,MTA通常会在Received
标题中放置一些可以派上用场的信息,但并不总是采用可预测的格式。某些本地传递代理(链中的最后一步,即将电子邮件传递到实际邮箱中)在将邮件放入邮箱之前会将Delivered-To
之类的标题附加到邮件中,但这取决于传递代理。邮件列表会添加List-Id
之类的标题,说明在将邮件重新发送给各个订阅者之前,电子邮件已发送到哪个邮件列表。
没有一个地方可以看。你可以做的最好的事情就是找到在你的特定场景中总是相同的东西并使用它,或者如果没有任何东西,安排你用来转发消息的任何脚本/函数来添加它自己的面包屑踪迹在标题中。