有人可以告诉我如何做到以下几点:
我公司用Linux,Apache,MySQL和PHP构build了自己的项目pipe理系统。 在Web应用程序的数据库中,有一个名为t_project的表,用于存储公司所有项目的信息。 我的老板要我devise一个解决scheme,如果有人给(t_project.project_id)@ mysite.com发送一封电子邮件,Web应用程序会把电子邮件写到一个名为t_project_message的数据库表中。
我如何解决这个问题? 我需要学习什么?
额外的笔记我刚刚注意到,我的问题中的文字删除了“(t_project.project_id)@ mysite.com”,我已经添加了回来。 那么这是否意味着我将需要与我的数据库中的项目一样多的电子邮件帐户? 那可能是几万…
你在PHP主机上运行什么邮件服务器? 对于几个PHP应用程序,我负责使用Exim,并使用Exim设置传输和路由器。 这意味着Exim将接受消息,然后运行PHP脚本并将消息传递给PHP脚本STDIN。 PHP脚本然后根据消息的内容做事情。
以下路由器/configuration将接受邮件[email protected],[email protected]和tckt-{id#}@helpdesk.example.org。 通过Exim,传输和路由器configuration非常灵活,下面只是一个可能的configuration方法。 我怀疑我所configuration的将直接应用于您的项目,您可能需要阅读Exim 。 我也很确定其他邮件服务器也能够做同样的事情。 我只是不熟悉他们。
### router/050_helpdesk_router ################################# helpdesk_router: driver = accept domains = helpdesk.example.org caseful_local_part = true local_parts = lsearch;/etc/exim4/helpdesk local_part_suffix_optional local_part_suffix = -* transport = helpdesk_transport ### transport/20_helpdesk_router ################################# helpdesk_transport: driver = pipe command = /usr/bin/php ${lookup{$local_part}lsearch{/etc/exim4/helpdesk}} $local_part '${if def:local_part_suffix {$local_part_suffix}}' # return the data from the script on a failure return_fail_output = true # temporary error temp_errors = 10 # set a timeout for 30 seconds timeout = 30s current_directory = /home/helpdeskadmin/ home_directory = /home/helpdeskadmin/ user = helpdeskadmin group = helpdeskadmin ### /etc/exim4/helpdesk ################################# helpdesk: /srv/www/helpdesk.example.org/www/helpdesk/mail/recv.php tckt: /srv/www/helpdesk.example.org/www/helpdesk/mail/recv.php
给出问题的邮件parsing部分的起点。 我使用Zend_Mailparsing传入消息,并发送邮件。
你有时间也告诉我你的方法的优点/缺点与Ben的方法吗?
像我描述的一样,钩入MTA。
通常用PHP从cron进行邮箱轮询。 从cron你将必须非常小心,以确保您的轮询做某种forms的locking,以便您不响应或处理相同的消息两次。
过去经常这样做的方法是每隔X分钟通过cron运行fetchmail 。 Fetchmail将通过IMAP或POP3检索邮件,然后通过某种types的处理程序/parsing器脚本(通常以perl,python等书写)pipe理邮件。 parsing器脚本会将所需的任何数据从消息中提取出来,然后将该信息插入到数据库中的相应位置。
根据您的邮件服务器,您可以编写一个PHP脚本,使用IMAP在服务器上查询邮箱并相应采取相应的措施。
有一个可用于PHP的IMAP扩展,它可以从服务器获取电子邮件消息,也可以在服务器上移动它们,或者在将它提交到数据库时完全删除它们。
你可以安排这适当与cron。
虽然您可以轮询POP邮箱是一个非常低效的解决scheme。 假设你可以将邮件路由到目标系统,更好的解决scheme是同步处理请求。 虽然您可以使用.forward机制,但我build议使用procmail作为MDA – 它允许您编写复杂的行为,如正在运行的程序,转发副本,条件回复等。