如何在Web应用程序中接收电子邮件并对其进行处理

时间:2009-06-08 14:33:07

标签: php email

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

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

提前致谢。

11 个答案:

答案 0 :(得分:49)

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

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

我还发现 IMAP优于POP 进行此类处理。

答案 1 :(得分:15)

最近我希望能够立即接收我正在制作的电子邮件,所以我做了一些研究(我实际上也在这里查看这个问题)并且我最终发现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你可以自己设置做同样的事情。

希望能帮助别人!

答案 2 :(得分:14)

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

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

或者您也可以使用包含

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

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

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

答案 3 :(得分:7)

结帐fMailbox。它不需要任何非标准扩展(例如imap),并且已经过各种服务器,附件,多部分消息,SSL等测试。

答案 4 :(得分:6)

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

答案 5 :(得分:4)

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

答案 6 :(得分:3)

您需要在Php中实施电子邮件客户端。这可能是POP客户端。

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

快速谷歌搜索“POP客户端php”已经发现了大量不同的选项。很难说它是否真的是“The One True PHP POP Library”,否则我会把它包含在这里。如果您使用的是预先存在的框架,您可能希望检查其POP支持级别,否则请检查上面的Google搜索结果并选择。或者它可能只是最简单(也是最有教育意义的:))推出自己的。

答案 7 :(得分:2)

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

您只需创建一个接收FORM POST的脚本,并根据需要执行任何操作。

您还可以查看Mandrill(通过MailChimp),SendGrid和PostMarkApp。

答案 8 :(得分:2)

这里有一个很棒的教程:

http://www.evolt.org/incoming_mail_and_php

介绍如何将电子邮件直接转发到您的脚本,您的脚本通过stdin(fopen,fread等)读取该脚本。教程代码甚至可以为您执行标题/正文的基本解析。

答案 9 :(得分:2)

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

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

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

答案 10 :(得分:1)

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

以下是postfix的示例,但sendmail也可以使用类似的功能 http://www.adkap.com/autoresponder.html