5

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

例如:

  1. 我将其设置为 info@st​​ackoverflow.com,然后当 slim@slim.com 向 info@st​​ackoverflow.com 发送电子邮件时
  2. 我的系统将捕获它并显示带有该组附件的电子邮件
  3. 谁处理电子邮件将生成一个“randomHashTemp”@stackoverflow.com 以确定谁处理该案例
  4. 系统将通过“randomHashTemp”@stackoverflow.com(如 google group)回复
  5. 通过“randomHashTemp”@stackoverflow.com 继续沟通

  1. 如果用户发送到 else@stackoverflow.com 那么将被他们当前的电子邮件服务器(如交换)捕获

我不知道这个叫什么。我可以知道如何实施吗?请提供一些链接或关键字的建议。我知道很多知识库解决方案,CRM,通过 CNAME 集成的项目管理软件,更改 DNS 那些东西,但我不知道如何。谢谢。

更新

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

4

4 回答 4

1

有两种主要方法可以实现这一点

从邮箱中获取电子邮件

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

相关问题

将邮件处理重定向到程序

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

SO之外的相关问题

具体来说,找到支持 procmail 脚本的网络主机可能是最容易的。这些配置脚本允许您将电子邮件重定向到 PHP 程序,您可以将其作为域中所有电子邮件的总称。请参阅此示例答案

于 2013-03-12T07:00:34.637 回答
1

我已经用cloudmailin做到了这一点——您只需为您的所有公共地址设置邮件转发到您的 cloudmailin 地址。所以:

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

  2. example.com 上的邮件服务器将所有邮件转发infoyouraccount@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'
    ?>
    

在这个例子中,我使用了哈希,info+dfj28d因为我们的邮件域托管在 gmail 上,所以 gmail 的username+alias语法是一种将所有随机哈希发送到同一个邮箱的简单方法。其他邮件主机也有类似的创建通配符别名的方法。

关键是地址中需要一个随机组件dfj28dinfoinfoelse@example.com

于 2013-03-19T23:31:59.950 回答
1

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

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

[顺便说一句,我建议使用专门为您的应用程序设置的单独域,它将邮件服务器和责任分开,并允许客户端更改/升级/重新配置邮件服务器而不会破坏应用程序。]

您保留将“真实”用户添加到应用程序后端的能力,这意味着如果邮件被意外发送到它,您可以转发“else@”。

额外的好处包括:

  • 你得到谷歌垃圾邮件过滤器。
  • 你会得到一个网络邮件界面(基本上是gmail)。
  • 您可以将域添加为别名,因此可以轻松设置多个域。(带有警告:您必须将域添加为别名,只有主应用程序域支持包罗万象

涉及的步骤:

  1. 在域上设置 google Apps。对于电子邮件,它涉及 DNS 条目,因此最好是在您的控制服务器下的域。
  2. 为您的应用添加一个帐户,并设置总括。
  3. 构建所说的应用程序;)生成特殊的电子邮件地址应该不是问题——我们使用像 operation.000345@ 这样的格式
  4. 构建读取传入邮件的部分。http://php.net/manual/en/book.imap.php我们的应用程序将邮件从收件箱移动到“AppArchive”或“AppInvalid”,具体取决于我们是否可以在应用程序中找到与邮件相关的内容。(另外:通过将 AppInvalid 拖回收件箱来轻松调试)。
  5. 在 webmail 客户端上使用您的 App 帐户登录,然后观看奇迹发生...

我可以详细说明 IMAP 代码,但这个想法应该很清楚。


(不过,我们也将 Mandrill 用于不同的项目 - 他们的 API 似乎也是一个不错的方法)

于 2013-03-20T10:51:52.173 回答
0

谢谢大家回答我的问题!!经过几天的研究,我终于得到了一些线索。这是对该问题的编译答案。

首先,在系统中实现fMailbox。[感谢@Nytram,请作为一个问题回答我给你 50 名声望。这个链接意义重大!] 实现它的邮件接收功能。此方法无需接触邮件服务器,无需接触系统环境本身,纯PHP即可!它不是一个框架,所以它只能自由提取部分功能。这是这种情况下最好的工具(如果您知道更好的东西,请提出建议!谢谢)

  • 设置 FMailbox

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

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

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

  • 实施 Explode 捕获电子邮件地址部分。

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

非常感谢所有资源!!

于 2013-03-20T14:42:27.177 回答