C# 回复电子邮件的用户。如何从用户电子邮件中获取数据?

C# 回复电子邮件的用户。如何从用户电子邮件中获取数据?,c#,java,email,mime,pop3,C#,Java,Email,Mime,Pop3,我在实现以下场景时遇到困难 假设您有一个能够在用户之间发送和接收消息的网站。 用户收到一封电子邮件,通知他在软件系统上有一条新消息(无论它是如何实现的)。他可以通过电子邮件发送回复或登录该站点并使用该站点回复“消息”来回复此消息 在第一种方法中,如果用户只是回复电子邮件通知,您(作为开发人员)如何知道回复的“消息”(ID)? 我想这些信息会存储在MIME扩展中。是否将MIME扩展传输到邮件的回复中?如果是,则解决方案可能是查看用户回复yes的原始消息通知的数据。 有什么想法吗?谢谢唯一“可靠”的

我在实现以下场景时遇到困难

假设您有一个能够在用户之间发送和接收消息的网站。 用户收到一封电子邮件,通知他在软件系统上有一条新消息(无论它是如何实现的)。他可以通过电子邮件发送回复或登录该站点并使用该站点回复“消息”来回复此消息

在第一种方法中,如果用户只是回复电子邮件通知,您(作为开发人员)如何知道回复的“消息”(ID)? 我想这些信息会存储在MIME扩展中。是否将MIME扩展传输到邮件的回复中?如果是,则解决方案可能是查看用户回复yes的原始消息通知的数据。
有什么想法吗?谢谢

唯一“可靠”的方法是在用户回复的发件人地址中对该信息进行编码;您还可以将它放在消息的主题或正文中,“希望”用户不要篡改它。有一个“回复(邮件id)”标题,但是很多现有的电子邮件客户端没有正确设置标题

通常的机制是这样的:创建电子邮件别名前缀,并在末尾附加消息id代码片段;例如,如果这是用于采购订单确认,您可以创建一个电子邮件别名处理地址,格式为
po-*@example.com
,其中
*
是唯一的邮件ID。然后,当您发送邮件时,您应该在
发件人:
回复至:
标题中输入相应的地址。例如:

From: "Purchase Order Confirmation (#1234)" <po-1234@example.com>
To: "John Doe" <jdoe@example.com>
Reply-To: "Purchase Order Confirmation (#1234)" <po-1234@example.com>
Subject: Confirm your order (#1234)
From:“采购订单确认(#1234)”
致:“约翰·多伊”
回复:“采购订单确认(#1234)”
主题:确认您的订单(#1234)

根据您的邮件服务器,您应该能够定义一个“分隔符”字符(通常是
-
+
),用于拆分电子邮件地址的“本地部分”(左侧
@
)的部分;通常还有另一种机制将前缀映射到脚本,以处理特定形式的所有地址。脚本界面通常非常类似于web上的CGI,发送一些环境变量并将消息本身管道化到标准输入中。如果你的应用程序主要是基于网络的,你可能会发现收集收到的电子邮件正文更“舒适”,并将其发布到一个私有(可能是http://[::1]/getMailReply)处理程序。这可能会帮助您更容易地重用现有代码。

唯一“可靠”的方法是将该信息编码到用户答复的发件人地址中;您还可以将它放在消息的主题或正文中,“希望”用户不要篡改它。有一个“回复(邮件id)”标题,但是很多现有的电子邮件客户端没有正确设置标题

通常的机制是这样的:创建电子邮件别名前缀,并在末尾附加消息id代码片段;例如,如果这是用于采购订单确认,您可以创建一个电子邮件别名处理地址,格式为
po-*@example.com
,其中
*
是唯一的邮件ID。然后,当您发送邮件时,您应该在
发件人:
回复至:
标题中输入相应的地址。例如:

From: "Purchase Order Confirmation (#1234)" <po-1234@example.com>
To: "John Doe" <jdoe@example.com>
Reply-To: "Purchase Order Confirmation (#1234)" <po-1234@example.com>
Subject: Confirm your order (#1234)
From:“采购订单确认(#1234)”
致:“约翰·多伊”
回复:“采购订单确认(#1234)”
主题:确认您的订单(#1234)

根据您的邮件服务器,您应该能够定义一个“分隔符”字符(通常是
-
+
),用于拆分电子邮件地址的“本地部分”(左侧
@
)的部分;通常还有另一种机制将前缀映射到脚本,以处理特定形式的所有地址。脚本界面通常非常类似于web上的CGI,发送一些环境变量并将消息本身管道化到标准输入中。如果你的应用程序主要是基于网络的,你可能会发现收集收到的电子邮件正文更“舒适”,并将其发布到一个私有(可能是http://[::1]/getMailReply)处理程序。这可能有助于您更容易地重用现有代码。

我们在服务器上设置了一个
catch all
电子邮件地址,例如
catch-all@myserver.com
。当我们向用户发送电子邮件时,我们在发件人地址中对消息id和可能需要的任何其他元信息进行编码。根据您的需求,您可以混淆这一点,也可以不混淆。因此,例如,如果用户在系统中有一条新消息,其
ID
100
,则我们发送给用户的电子邮件的发件人地址类似于
回复消息-100@myserver.com
。确保无论您对发件人地址使用何种格式,都不会在邮件服务器上生成真实的电子邮件地址

因此,当用户响应此消息时,它将被发送到您设置的“一网打尽”收件箱。从这里开始,您可以选择如何处理此电子邮件。在过去,我们编写了一个小的定时服务,每隔几分钟运行一次,检查此收件箱中的新电子邮件,根据您的喜好进行处理(插入数据库,发送更多电子邮件,等等),并在处理完邮件后删除邮件。这是脆弱的,因为电子邮件客户端发送电子邮件的方式都略有不同,因此很难解析各种各样的客户端消息

第二种方法是与集成,它有一个传入的电子邮件api,应该很快就会公开(我们已经进入测试版)。您将所有内容设置为相同的方式,只会将服务器的综合地址转发到您将使用邮戳设置的邮戳传入地址,然后