许多Web应用程序(asana,basecamp,highrisehq等)都具有此功能。 例如:如果任何用户为其他用户创建任务,则该任务会通知相关用户。
如果任务所有者回复此电子邮件。重播地址类似于以下内容:
todo-151280554-ed5b3379c735a9673a469b6b@basecamp.com
这是一个虚拟电子邮件地址。当Web应用程序(basecamp)收到此电子邮件时。任务所有者的电子邮件将对任务进行评论。
我的问题是:如何,Web应用程序创建虚拟电子邮件地址并阅读此邮箱?
如何,我将在基于symfony2的Web应用程序上创建类似的功能?
答案 0 :(得分:3)
常规方法是将入站电子邮件转发到解析电子邮件并适当更新数据库的程序。基于symfony2的Web应用程序在访问它时会看到新状态。
大多数MTA都可以支持这种情况,通常是通过启用子地址和添加帐户。例如,如果您使用Postfix,则可以创建一个名为待办事项set recipient_delimiter to - as in this recipe的帐户,并在|/home/todo/bin/add-todo-from-email
中写下/home/todo/.forward
。完成后,将邮件发送到todo-whatever@example.com或只发送todo@example.com,即可执行/ home / todo / bin / add-todo-from-email。
formail/procmail和mailman等程序是作用于电子邮件的开源程序的示例。如果你谷歌搜索formail,你会发现一些例子。
解析电子邮件很有趣,但是......
答案 1 :(得分:0)
这通常通过将入站电子邮件传送到PHP脚本来完成。如何完成取决于您的服务器的MTA(邮件传输代理),但教程应该适用于所有主要的。
如果您不想执行运行MTA的工作,许多第三方电子邮件提供商(如Mandrill,Sendgrid和Postmark)将处理入站电子邮件,并在收到服务器时向您的服务器发出API调用。我使用过Mandrill,他们的文档位于http://help.mandrill.com/entries/21699367-Inbound-Email-Processing-Overview
答案 2 :(得分:0)
您可以通过Inbound Parse Webhook使用SendGrid实现此目的。
设置完成后,您域中收到的任何电子邮件,甚至虚拟地址,都会通过POST请求以JSON形式传递给您的应用,以及您指定的应用中的任何端点,例如:
http://myappliveshere.com/receive
您收到的JSON是整个消息(list of all fields is here),因此您可以抓取特定字段。在这种情况下,您将获取to
字段,因为这将具有您需要的虚拟地址。
然后,您可以使用该虚拟地址查找需要在数据库中通知的用户。
创建虚拟地址可以通过多种方式完成,如果您使用模型创建用户,则可以在将用户插入数据库之前使用生命周期回调来执行此操作。
您可以使用用户的名字,姓氏和随机数的MD5哈希创建地址,如下所示:
randomNumber = mt_rand(10,100);
virtualAddress = md5(user.firstname+user.lastname+randomNumber);
在第一个实例中创建用户记录时,您会将virtualAddress
插入其中。
正如你从Basecamp的做法中看到的那样,他们还为每个虚拟地址添加了一个类型,例如地址中的todo
:todo-151280554-ed5b3379c735a9673a469b6b@basecamp.com
,您可以在应用中执行相同操作通过分类发送给其他用户的电子邮件通知类型。
如果你打破他们如何做的话,你可以用一个地址做很多事情:
todo-151280554-ed5b3379c735a9673a469b6b@basecamp.com
分解为:
todo
=通知类型
151280554
=此引用的待办事项的ID
ed5b3379c735a9673a469b6b
=用户的虚拟地址