将电子邮件管道传输到 PHP 应用程序



我有一个使用 Slim 路由框架构建的 PHP 应用程序。 该应用程序需要从订单发送动态电子邮件,以便用户可以回复这些电子邮件,并且响应会直接返回到应用程序中(存储在MySQL中(。 我可以轻松地为每个订单创建动态地址,而且效果很好。 我的问题是把它找回来。

我设置了一个子域(mailer.example.com(,在cPanel中,我设置了一个转发器来捕获发送到该子域的所有邮件并将其转发到特定的PHP文件。 该php文件读取stdin并获取mime消息,并将其当前写入文件:

#!/usr/bin/php -q
<?php
// read from stdin
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd))
{
$email .= fread($fd, 1024);
}
fclose($fd);
$filename = "mail_".date("mdYHis").rand(1,99999999);
file_put_contents("mailfiles/".$filename, $email);
header("Location: http://www.example.com/public/mailer/process/".$filename);

如您所见,最后我想将其转发到我的实际应用程序,该应用程序具有所有数据库调用和其他例程来处理电子邮件。 但是我不知道如何将请求放入应用程序中。 它似乎忽略了上面的标头调用。

我做错了这一切,还是应该在这个脚本中做我需要的所有处理? 我意识到这可能是最简单的前进道路,但我也在尝试使用非常适合我的应用程序的邮件解析库。

不确定这一切是否有意义。 让我知道您还需要哪些其他信息。

我认为您要做的不是返回带有Location标头的HTTP响应,而是向Web服务器发起HTTP请求。

在这种情况下,您应该将header()呼叫替换为:

$ch = curl_init('http://localhost/public/mailer/process/' . $filename);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

请注意,脚本(为保存邮件内容而调用的脚本(将等待应用完成对请求的处理。如果这对您来说是一个问题,您需要使用一种技术在后台运行 PHP 进程。

您可以使用php读取邮箱并以这种方式解析电子邮件。

// To connect to a POP3 server on port 110 on the local server, use:
$mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password");

我不会为每个订单创建自定义回复电子邮件/邮箱,而是将订单添加到主题作为参考。这样,您只需分析一个邮箱。

在此处查找 imap 功能

最新更新