系统捕获电子邮件

时间:2013-03-12 03:31:04

标签: php email cloud laravel email-integration

目前我正在构建一个系统(自定义CMS),其要求是捕获公众发送到注册电子邮件地址的所有电子邮件,并通过系统通过注册的电子邮件回复电子邮件地址。

例如:

  1. 我将其设置为info@st​​ackoverflow.com,然后当slim@slim.com发送电子邮件至info@st​​ackoverflow.com时
  2. 我的系统会抓住它并显示包含该组附件的电子邮件
  3. 谁处理该电子邮件将生成“randomHashTemp”@stackoverflow.com以确定处理案件的人
  4. 系统将通过“randomHashTemp”@stackoverflow.com(如Google群组)回复
  5. 通过“randomHashTemp”@ stackoverflow.com
  6. 继续通信

    BUT

    1. 如果用户发送到else@stackoverflow.com,则会被当前的电子邮件服务器(如交换
    2. )捕获

      我不知道这个叫做的术语。我可以知道如何实施它?请咨询一些链接或关键字。我知道很多知识库解决方案,CRM,通过CNAME集成的项目管理软件,更改DNS这些东西,但我不知道如何。感谢。

      更新

      示例类似于http://www.cloudmailin.com 但我想要的是从我的应用程序生成并接收来自公众的电子邮件给我的客户。

4 个答案:

答案 0 :(得分:1)

实现此目的有两种主要方法

从邮箱中提取电子邮件

在此方法中,电子邮件会转到邮箱,您会定期检查此邮箱中的内容以处理电子邮件。虽然这通常会导致延迟,但您可以通过定期运行程序并让它一直轮询邮箱来减少这种情况。

Related question

将邮件处理重定向到程序

如果您的邮件服务器位于unix上,您可以将电子邮件处理重定向到可以根据需要处理电子邮件的脚本

Related question outside SO

具体而言,最简单的方法是找到支持procmail脚本的Web主机。这些配置脚本允许您将电子邮件重定向到PHP程序,您可以将其作为域的所有电子邮件的捕获。见example answer

答案 1 :(得分:1)

我已经使用cloudmailin完成了此操作 - 您只需要将所有公共地址的邮件转发设置为您的cloudmailin地址。所以:

  1. 用户通过电子邮件随机散列地址,例如: info+dfj28d@example.com

  2. example.com上的邮件服务器将info的所有邮件转发至youraccount@cloudmailin.com

  3. Cloudmailin会在http://example.com/yourwebhook.php向您的网站发布电子邮件。

  4. 即使所有邮件都通过单个cloudmailin地址进行过滤,cloudmailin也会在其发布的字段中包含原始哈希地址,因此您的网站可以提取哈希并确定哪个用户正在回复。伪PHP给你一个想法:

    <?php /* webhooks.php */
    $address = $_POST['to']; // 'info+dfj28d@example.com'
    $addressParts = explode('@', $address); // array('info+dfj28d', 'example.com')
    $userParts = explode('+', $addressParts[0]); // array('info', 'dfj28d');
    $hash = $userParts[0]; // 'dfj28d'
    ?>
    
  5. 在这个例子中,我使用像info+dfj28d这样的哈希,因为我们的邮件域是在gmail上托管的,所以gmail的username+alias语法是将所有随机哈希发送到同一邮箱的简单方法。其他邮件主机具有类似的创建通配符别名的方法。

    关键是你需要一个随机组件(dfj28d)和一个静态组件(info),因此你的邮件服务器可以区分散列地址(任何包含{ {1}})和普通邮件帐户(info)。

答案 2 :(得分:1)

我们使用Google Apps进行类似设置。 http://www.google.com/apps/

我们创建了一个“app @”帐户,可以将所有邮件作为一个邮件接收。该应用程序会为您的电子邮件生成自己的电子邮件地址。该应用程序被编写(php)以通过IMAP读取传入的电子邮件。

[我建议使用专门为您的应用设置的单独域名,将邮件服务器和责任分开,并允许客户端在不破坏应用程序的情况下更改/升级/重新配置邮件服务器。 ]

您可以将“真实”用户添加到Apps后端,这意味着如果邮件被意外发送,您可以转发“else @”。

增加的好处包括:

  • 你得到谷歌垃圾邮件过滤器。
  • 你得到一个webmail界面(基本上是gmail)。
  • 您可以将域添加为别名,因此可以轻松设置多个域。 (带有警告:您必须将域添加为别名,只有主要的Apps域支持catchall

涉及的步骤:

  1. 在域上设置Google Apps。对于电子邮件,它涉及DNS条目,因此最适合您控制服务器下的域。
  2. 为您的应用添加一个帐户,并设置catchall。
  3. 构建应用程序;)生成特殊电子邮件地址应该不是问题 - 我们使用的格式如operation.000345 @
  4. 构建读取传入邮件的部分。 http://php.net/manual/en/book.imap.php我们的应用程序将邮件从收件箱移动到“AppArchive”或“AppInvalid”,具体取决于我们是否可以在应用程序中找到与邮件相关的内容。 (另外:通过将AppInvalid拖回收件箱轻松调试)。
  5. 使用您的应用帐户登录网络邮件客户端,观看神奇的事情......
  6. 我可以详细说明一下IMAP代码,但这个想法应该是明确的。


    (我们也将Mandrill用于另一个项目 - 他们的API看起来也是一个很好的方式)

答案 3 :(得分:0)

感谢大家回答我的问题!经过几天的研究,最后我得到了一些线索。以下是该问题的汇编答案。

首先,对系统实施fMailbox。 [感谢@Nytram,请回答我的问题,给你50个声誉。这个链接意味着很多!]实现它的邮件接收功能。这种方法无需触摸电子邮件服务器,无需触摸系统环境本身,可以用纯PHP完成!它不是框架,所以它可以自由地提取功能的一部分。对于这种情况,这是有史以来最好的工具(如果你知道更好的东西,请提出建议!谢谢)

  • 设置FMailbox

第二,实施[@Ramon de la Fuente]的概念。 (感谢@Ramon de la Fuente,谷歌应用程序很好,但它成了历史:P它很好,当时它仍然是免费的,而现在很难说服所有客户使用谷歌应用程序。他们可能在网站上安装了自己的交换服务器,谁知道:))

  • 设置客户端单个电子邮件以捕获所有(*@email.com)

第三,实施[@Nick]的代码。 (感谢@Nick,由于隐私和机密问题。客户电子邮件对自己也很重要,我们必须尽量减少第三方插件的使用。虽然我喜欢cloudmailin的想法)

  • 实施爆炸抓住电子邮件地址部分。

用于发送,因为系统定义为捕获所有。只需预定义字段回复,FMailbox也会捕获它;)

非常感谢所有资源!!