4

我的 PHP 技能是中级的,但我想尝试实现这一点:

我有一个本地爵士音乐家的网站。我希望他们能够将即将举行的演出添加到他们的个人资料页面。我希望他们能够通过电子邮件发送这些更新,就像我可以将任务添加到我的在线待办事项列表中一样。

所以我需要在服务器上解析我帐户中的电子邮件。

我认为执行标准格式是公平的。.我在想

(In subject)NEWGIG   [[or maybe set up a separate "newgig@mySite.com" email account for gig updates only]]

TITLE>My next super gig<TITLE
DATE>03/10/2012<DATE
DESC>Here is some supplementary information<DESC
LINK>www.hereIsTheVenue.com<LINK

将添加演出并发送确认电子邮件。

这有多难做到?可能吗?我想我可以完成所有的测试解析和 SQL 等。但我对邮件没有太多经验,而且似乎有很多“繁琐的位”需要注意。

任何人都可以在我开始之前确认这是可行的吗?有什么提示或注意事项吗?

顺便说一句 - 我正在做电子邮件解析器,因为我希望它超级好用。音乐家是出了名的懒惰,所以如果我可以让他们直接从他们的电子邮件中发布一个演出(他们通常会得到确认),那么他们就可以省去访问网站、登录、访问他们的帐户等的麻烦。

4

3 回答 3

7

是的,这是可行的。您所需要的只是访问具有 smtp 端点的服务器。诸如 postfix 或 exim 之类的东西或任何其他收听传入电子邮件的东西。您需要配置此软件以将传入邮件作为纯文本传递到您的脚本或程序中,该脚本或程序可以处理来自stdin.

最简单的方法是创建一个指向脚本的新电子邮件别名。我的/etc/aliases文件中有很多条目,如下所示:

userpart: "|/usr/bin/php -f /path/to/some/script.php"

每当电子邮件到达此地址时都会触发此操作:userpart@this.server.example

脚本本身像这样读取输入

$fp = fopen('php://stdin','r');
    while (!feof($fp)) {
            $input .= fgets($fp);
    }
fclose($fp);

您可能会发现使用现有的 MIME 解析器很有用,因为输入可以是现代 MUA 可以想到的任何内容。

于 2012-09-20T13:21:32.110 回答
2

解析电子邮件就像解析任何类型的数据一样。您只需为电子邮件定义一个通用格式。

编写解析器后,创建一个脚本,使用 php imap 函数定期连接到邮件服务,读取邮件,解析它们并将它们插入到数据库中。

但是创建一个 Web 表单会更简单、更快捷,他们将在其中添加所有的演出数据。

于 2012-09-20T13:20:04.893 回答
1

您可以使用正则表达式来执行此操作。但是您需要对格式进行一些改进。

确保您的格式不包含用户可以输入的字符并破坏您的格式。如果您想让您的用户/客户端使用 XML 格式变得非常简单。用户将更容易对其进行编辑。

这是前任:(我创建了如何获取TITLE并修改了开始和结束标记)现在它使用双花括号

$str= '
(In subject)NEWGIG   [[or maybe set up a separate "newgig@mySite.com" email account for gig 
updates only]]
{{TITLE}}My next super gig{{TITLE}}
DATE>03/10/2012<DATE
DESC>Here is some supplementary information<DESC
LINK>www.hereIsTheVenue.com<LINK';
preg_match('#{{TITLE}}(?P<title>.+){{TITLE}}#', $str, $matches);
echo $matches['title'];

XML 格式(您可以使用simplexml_load_string 函数解析 XML 格式):

<document>
<TITLE>My next super gig</TITLE>
<DATE>03/10/2012</DATE>
<DESC>Here is some supplementary information</DESC>
<LINK>www.hereIsTheVenue.com</LINK>
</document>
于 2012-09-20T14:11:05.540 回答