如何在 Web 应用程序中接收和处理电子邮件

Posted

技术标签:

【中文标题】如何在 Web 应用程序中接收和处理电子邮件【英文标题】:How do I receive email and process it in a web application 【发布时间】:2010-11-01 04:46:56 【问题描述】:

我已经为我的 php Web 应用程序设置了一个电子邮件 ID。用户将向此 id 发送电子邮件。

我想在应用程序中处理这些电子邮件。我该怎么做?

提前致谢。

【问题讨论】:

【参考方案1】:

Travis Austin 建议的托管解决方案运行良好。

如果您正在寻找自托管的,您可以查看Mailin 模块,该模块允许您接收电子邮件、解析它们并将它们发布到您选择的 webhook。它还检查 dkim 和 spf ,计算 spamassassin 分数并确定消息语言。

我不知道它是否适合您的需求,因为它是用 node.js 编写的,但是您拥有的选项越多越好。 (免责声明:我是Mailin的维护者)

【讨论】:

mailin 仍然是一个活跃的项目吗?【参考方案2】:

这里有一个很棒的教程:

http://www.evolt.org/incoming_mail_and_php

其中介绍了如何将电子邮件直接转发到您的脚本,您的脚本通过标准输入(fopen、fread 等)读取该脚本。教程代码甚至为您完成了标题/正文的基本解析。

【讨论】:

【参考方案3】:

有许多托管解决方案可以接受您的域的电子邮件,然后将其发布到您的网站上。其中大部分将为您处理邮件解析(分离附件、“收件人”、“发件人”和其他地址等)。

您只需创建一个脚本来接收 FORM POST 并使用它执行您需要的任何操作。

Mailgun CloudMailin

您还可以查看 Mandrill(由 MailChimp 提供)、SendGrid 和 PostMarkApp。

【讨论】:

Mailgun 正是我所需要的,而且他们有一个非常慷慨的免费套餐!【参考方案4】:

我最近参与了一个项目,该项目需要解析来自 gmail 的电子邮件,并根据电子邮件的内容使用某些值更新数据库。我使用 ezcMail (now) Zeta Components 库连接到邮件服务器并解析电子邮件。

我采用的策略是过滤所有带有“未处理”标签的有趣传入邮件。每 15 分钟通过 crontab 运行 PHP 脚本。该脚本将连接到邮件服务器并打开 IMAP 未处理文件夹并解析每封电子邮件。将感兴趣的值插入数据库后,脚本将文件移动到另一个 IMAP 文件夹“已​​处理”。

我还发现 IMAP 在这种处理方面比 POP 要好。

【讨论】:

@Shoan 我知道这个答案真的很老了......但你介意为我发布一些代码吗? @pattyd 不幸的是,我没有那个代码了。但是用我在大纲中的回答应该相对简单。 Zeta 组件的文档将向您展示如何阅读电子邮件。 @pattyd 这不是您在 *** 上要求的方式。 按钮是... @Bojangles,我只是在检查...即使我使用了神秘的“ASK QUESTION”按钮,您也可能会将其标记为重复! @pattyd 可能不是,前提是您的问题不仅仅是“请发布一些代码”而不是“这是我的尝试,我哪里出错了?”【参考方案5】:

最近,我希望能够在我正在做的事情中立即接收电子邮件,所以我做了一些研究(我实际上也在这里寻找这个问题),最终我发现 Google App Engine 非常有帮助。它有一个 api,您可以使用它来接收和处理发送到 ____@yourapp.appspotmail.com 的电子邮件。我知道这似乎并没有什么帮助,因为您可能不希望您的应用在 App Engine 上,并且您希望在 yourdomain.tld 上接收电子邮件,但只需进行一些设置,您就可以得到您想要的。

我的基本设置是这样的:

用户向 user_id@mydomain.tld(实际上并不存在的电子邮件地址)发送电子邮件 mydomain.tld 有一个包罗万象的电子邮件地址,可以转发到 inbox@GAEapp.appspotmail.com GAEapp(应用引擎上的一个小应用程序)接收电子邮件,对其进行处理,然后将包含相关内容的发布请求发送到 mydomain.tld

所以基本上你可以制作一个小 GAE 应用程序,它就像一个中间人来抓取电子邮件。即使使用重定向,它也会正常工作,电子邮件会很好。

另外,我决定学习一些 django,并且我制作了一个名为 Emailization 的免费应用程序,它基本上可以为你做到这一点。您创建一个类似___@emailization.com 的收件人,并提供一个 POST 到的 URL。发送到该地址的任何内容都会发布到您的 URL。您可以在您的域上创建一个统称转发给该电子邮件收件人,您也将通过统称收到电子邮件!

或者你可以看到我做的small GAE app,你可以设置自己做同样的事情。

希望对某人有所帮助!

【讨论】:

【参考方案6】:

如果您的系统上安装了 procmail,请使用它。将这些行放在接收电子邮件的用户的主目录中的 .procmailrc 文件中。

:0
| /path/to/your/script.php

或者您也可以使用包含

的 .forward 文件
"|/path/to/your/script.php"

Procmail 的优势在于,如果您的应用程序需要,它可以让您处理更复杂的过滤。

您的 script.php 文件将从标准输入读取电子邮件的标题和正文。

【讨论】:

而且,这里有一个很棒的教程概述了上述过程:evolt.org/incoming_mail_and_php【参考方案7】:

有一个很棒的图书馆:试试这个:http://code.google.com/p/php-imap

【讨论】:

【参考方案8】:

查看fMailbox。它不需要任何非标准扩展(例如 imap),并且已经在各种服务器、附件、多部分消息、SSL 等方面进行了测试。

【讨论】:

【参考方案9】:

如果您想避免通过 POP 或 IMAP 访问另一台服务器来下拉电子邮件,您可以在您设置的某些 SMTP 服务器(可能是同一台 php 服务器)上的电子邮件接收过程中添加一个“挂钩” .然后让此服务器处理目标电子邮件。

这是一个使用 postfix 的示例,但类似的事情也可以使用 sendmail。http://www.adkap.com/autoresponder.html

【讨论】:

链接已损坏。【参考方案10】:

我建议使用 Zend Framework 的Zend_Mail 组件。

【讨论】:

【参考方案11】:

您需要在 PHP 中实现一个电子邮件客户端。这可能是POP 客户端。

此代码将查询包含您的电子邮件的 POP 服务器,下载它,然后您可以根据需要对其进行解析。

在 Google 上快速搜索“POP 客户端 php”,发现了大量不同的选项。很难说是否真的有“一个真正的 PHP POP 库”,否则我会把它包括在这里。如果您使用的是预先存在的框架,您可能希望查看其 POP 支持级别,否则请查看上面的 google 结果并进行选择。或者它可能只是最简单的(也是最有教育意义的:))自己动手。

【讨论】:

以上是关于如何在 Web 应用程序中接收和处理电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Flask 教程 第十章:邮件支持

android 邮件服务器,全球邮企业邮箱Android(安卓)系统手机 POP3 IMAP协议设置方法

如何解析Azure IOT中心逻辑应用程序中的消息

什么是电子邮件

如何仅使用电子邮件应用程序发送带附件的电子邮件?

TOM随心邮——一款好用的移动办公利器