我将使用 c# 开发一个票务系统,该系统应在提交票证时向接收者发送包含票证内容的电子邮件,并且接收者应该能够回复该电子邮件,从而使发件人收到回复的电子邮件。令我困惑的是,我将如何跟踪接收者回复的特定票证。我不是在寻找任何代码,只是概念或最佳实践。
3 回答
从理论上讲,您可以将 与Message-ID
结合使用In-Reply-To
,如RFC 5322中所述:
“ Message-ID:”字段提供了一个唯一的消息标识符,它引用了特定消息的特定版本。消息标识符的唯一性由生成它的主机保证(见下文)。此消息标识符旨在为机器可读且不一定对人类有意义。消息标识符与特定消息的一个版本有关;对消息的后续修订都会收到新的消息标识符。
“ In-Reply-To:”和“References:”字段用于创建对消息的回复。它们保存原始消息的消息标识符和其他消息的消息标识符(例如,在对本身是回复的消息的回复的情况下)。“In-Reply-To:”字段可用于标识新消息作为回复的消息(或多个消息),而“References:”字段可用于标识对话的“线程”。
创建对消息的回复时,结果消息的“In-Reply-To:”和“References:”字段构造如下:
“In-Reply-To:”字段将包含作为回复的消息(“父消息”)的“Message-ID:”字段的内容。如果有多个父消息,则“In-Reply-To:”字段将包含所有父消息的“Message-ID:”字段的内容。如果任何父消息中没有“Message-ID:”字段,则新消息将没有“In-Reply-To:”字段。
当然,您应该Message-ID
在单独的数据库表中跟踪字段和内部票号之间的映射。
例子
从 yourCompany.com 发送一封新电子邮件 E1。
收到来自 yahoo.com 的回复 R1。消息头信息:
References: <11111@yourCompany.com> Message-ID: <22222@webServer.yahoo.com> In-Reply-To: <11111@yourCompany.com>
从 yourCompany.com 发送对 R1 的回复 R2。
从 yahoo.com 收到 R3 到 R2 的回复。消息头信息:
References: <11111@yourCompany.com> <22222@webServer.yahoo.com> <33333@yourCompany.com> Message-ID: <44444@webServer.yahoo.com> In-Reply-To: <33333@yourCompany.com>
我认为做到这一点的唯一方法(我从未见过有不同做法的票务系统)是将 ID 添加到主题行中。
在我们的例子中,我们有像“bla bla bla <<< CALLID: 12312 >>>”这样的主题标题。使用正则表达式,这很容易捕捉
以应用程序可以理解的特定格式将票证保存在主题中。
例如Subject can be Close TICKET T1
或
Reject Resolution TICKET T1
。
您可以要求客户在邮件正文中指定原因。
诀窍是提供您理解的预先格式化的主题。