可以触发 PHP 脚本来解析收到的电子邮件的 Linux 邮件客户端

可以触发 PHP 脚本来解析收到的电子邮件的 Linux 邮件客户端

我可以使用任何简单的基于文本的邮件客户端来触发 PHP 脚本来解析从用户收到的邮件吗?

我有一个 PHP 应用程序,可以向用户发送电子邮件,如果该应用程序可以解析用户的回复并将其存储到数据库中,那就太好了。

我使用 Centos 6 和 Postfix,PHP 使用 PHPMailer 发送电子邮件。未安装 X Window 系统。

答案1

您的问题有点令人困惑,因为您引用了基于文本的邮件客户端和 PHP 应用程序,然后指定“应用程序”(即您的 PHP 应用程序)将电子邮件(或从中提取的数据)存储在数据库中。

您可以而且可能应该将发送应用程序与响应处理应用程序分开。响应处理可以通过从 procmail 调用任何脚本来完成,因为您需要接收用户的主目录中的 .procmailrc 文件,该文件具有以下内容:

:0
* ^Subject:.*[response-email]
| /path/to/your_script

如果您希望处理发送到该电子邮件地址的所有邮件,您可以省略主题行,或使用不同的选择标准。

至于your_script我不知道有任何命令行邮件客户端可以直接将您的材料放入数据库中。由于您可能无论如何都应该测试响应(如果不是为了提取一些额外的数据库字段,至少是为了扔掉垃圾邮件),您可能希望your_script使用 PHP编写聚乙二醇解析其内容并将其存储在数据库中。 (当然,您也可以使用您熟悉的其他语言来实现此目的)。

如果您在运行此脚本的计算机上使用 postfix 接收电子邮件,请确保调用procmail/etc/postfix/main.cf:

mailbox_command = procmail -a "$EXTENSION"

答案2

...好吧,我要后退几步,解释一下电子邮件在幕后如何工作的一些事情,因为从评论中的问题来看,这个问题的部分问题是你不明白事情是如何运作的。工作,这反过来又会导致你对需要做什么才能完成你想要的事情产生误解。

首先,一些基本术语:

  • 邮件用户代理 (MUA) 就是您所说的“邮件客户端”。其目的是允许用户发送电子邮件,或从邮箱中检索电子邮件并阅读它们。从技术上讲,当您的 PHP 脚本发送电子邮件时,它充当 MUA。
  • 邮件传输代理 (MTA) 只负责将电子邮件从一个地方转移到另一个地方的业务。如今,这通常包括确保收到的电子邮件是真实的应该在此之前先传递,但这超出了目前的范围。把它想象成一个邮局。
  • 邮件传送代理 (MDA) 充当管道的端点;当 MTA 确定应在本地传送特定电子邮件时,它会调用 MDA 来处理事务。

当您发送电子邮件时,会发生以下情况:

  1. MUA 通过脚本或用户输入生成电子邮件,确保其按照国际标准正确封装(相当于在正确的位置写入地址并添加适量的邮票)并将其交给其配置的 MTA 。几乎所有 UNIX 变体真的微型嵌入式系统将运行本地 MTA,以便任何需要发送电子邮件的东西都可以无需使用 SMTP 即可完成此操作。
  2. MTA 接收邮件,并在确认其正确后应该要处理消息,请查看目标地址并决定如何处理它。如果不打算在本地处理,它会将邮件传递到另一个 MTA,据其所知,该 MTA 是发送该特定邮件的适当位置。
  3. 根据实际设置,步骤 2 可以重复几次 - 例如,本地计算机 -> 发送方 ISP 的用于发送邮件的智能主机 -> 接收方 ISP 的防病毒/反垃圾邮件过滤器 -> ISP 的主要传入邮件服务器。
  4. 最终,假设配置正确,步骤 3 中的循环将在 MTA 处终止,该 MTA 要么能够在本地传送电子邮件,要么权威地告诉发件人他们的邮件将不被接受。
  5. 最终的 MTA 会将电子邮件移交给指定的 MDA,然后由 MDA 处理实际的递送。这是通常通过将其放入收件人的邮箱来完成,但可以配置为几乎任何内容。

您所要求的已在第 5 步完成;您想要做的是为该特定电子邮件地址设置一个传递规则,而不是将其传递到邮箱中供人类阅读,而是将电子邮件通过管道传输到本地程序(不需要是特定的 PHP 脚本,或者的确任何PHP 脚本——只要它是可执行的),它将依次解析电子邮件输入并使用它来填写数据库中的条目。

安东的回答假设您能够在邮件服务器上添加其他电子邮件地址和关联用户,则介绍了设置管道的最便捷方法。如果您不这样做,您需要更有创意,但由于没有更多有关您、您的 ISP 以及您网站的域名之间的安排的信息,我们无法提供比这更多的建议。

答案3

答案4

我不知道你是否想在 PHP 应用程序中或仅在服务器上解析它。这两种变体都可以在不使用任何邮件客户端的情况下实现。

1) Bash/SH 或其他脚本语言。像这样的东西:

#!/bin/bash

MyUSER="SET-MYSQL-USER-NAME"
MyPASS="SET-PASSWORD"
MyHOST="localhost"
MyDB="SET-DB"

for mFile in `grep -iR 'WHAT TO FIND???' .`
do
  # here do something with your e-mail z.B:
  mysql -u $MyUSER -h $MyHOST -p$MyPASS MyDB << EOF
      insert into ...
      values ...;
  EOF
done

2)或者应用程序端的解析器(在PHP中),这非常简单。看看这个库:https://github.com/plancake/official-library-php-email-parser

相关内容