通过电子邮件创建 Web 条目


create an web entry via email

许多Web应用程序(Asana,Basecamp,highrisehq等)都具有此功能。例如:如果任何用户为其他用户创建任务,则该任务将通知相关用户。

如果任务所有者回复此电子邮件。重播地址类似于以下内容:

todo-151280554-ed5b3379c735a9673a469b6b@basecamp.com

这是一个虚拟电子邮件地址。当 Web 应用程序(大本营)收到此电子邮件时。任务所有者的电子邮件将对任务进行注释。

我的问题是:如何,Web应用程序创建一个虚拟电子邮件地址并读取此邮箱?

如何,我将在我的基于 symfony2 的 Web 应用程序上创建一个类似的功能?

常规方法是将入站电子邮件转发到解析电子邮件并适当更新数据库的程序。基于 symfony2 的 Web 应用程序在访问时会看到新状态。

大多数 MTA 都可以支持这一点,通常是通过启用子地址和添加帐户。例如,如果您使用 Postfix,您可以创建一个名为 todo set recipient_delimiter to 的帐户 - 如此配方中,并在 /home/todo/.forward 中写入|/home/todo/bin/add-todo-from-email。完成此操作后,将邮件发送到 todo-whatever@example.com 或仅发送 todo@example.com,即可执行/home/todo/bin/add-todo-from-email。

formail/procmail和mailman等程序是处理电子邮件的开源程序的例子。如果你在谷歌上搜索formail,你会发现一些例子。

不过,解析电子邮件很有趣...

这通常是通过将入站电子邮件管道传输到 PHP 脚本来完成的。如何完成取决于您服务器的 MTA(邮件传输代理),但教程应该适用于所有主要服务器。

如果您不想执行运行MTA的工作,许多第三方电子邮件提供商(如Mandrill,Sendgrid和Postmark)将处理入站电子邮件,并在收到入站电子邮件时对您的服务器进行API调用。我用过 Mandrill,他们的文档在 http://help.mandrill.com/entries/21699367-Inbound-Email-Processing-Overview

您可以使用 SendGrid 通过入站解析 Webhook 来实现此目的。

设置完成后,您的域中收到的任何电子邮件(甚至是虚拟地址)都会通过 POST 请求作为 JSON 传递到您的应用,以及您指定的应用内的任何终端节点,例如:

http://myappliveshere.com/receive

您收到的 JSON 是细分的整个消息(所有字段的列表在这里),因此您可以抓取特定字段。在这种情况下,您将获取to字段,因为它将具有您需要的虚拟地址。

然后,您可以使用该虚拟地址在数据库中查找需要通知的用户。

创建虚拟地址可以通过多种方式完成,如果您使用模型创建用户,则可以在将用户插入数据库之前使用生命周期回调执行此操作。

您可以使用用户名字、姓氏和随机数的 MD5 哈希创建地址,如下所示:

randomNumber = mt_rand(10,100);
virtualAddress = md5(user.firstname+user.lastname+randomNumber);
首先

创建用户记录时,您将virtualAddress插入到用户记录中。

正如您从 Basecamp 的操作方式中看到的那样,他们还为每个虚拟地址预置了一个类型,例如地址中的todotodo-151280554-ed5b3379c735a9673a469b6b@basecamp.com ,您可以在应用程序中执行相同的操作,以帮助对要发送给其他用户的电子邮件通知类型进行分类。

如果你

分解他们是如何做到的,你可以用一个地址做很多事情:

todo-151280554-ed5b3379c735a9673a469b6b@basecamp.com细分为:

todo = 通知类型

151280554 = 此引用的待办事项的 ID

ed5b3379c735a9673a469b6b = 用户的虚拟地址