我有一个使用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);
正如您所看到的,最后我想将此转发给我的实际应用程序,该应用程序具有处理电子邮件的所有数据库调用和其他例程。但我不知道如何将请求发送到应用程序。它似乎忽略了上面的标题调用。
我这样做是错的还是我应该在这个脚本中完成我需要的所有处理?我意识到这可能是最简单的前进路径,但我也尝试使用一个非常适合我的应用程序的邮件解析库。
不确定这一切是否有意义。让我知道您需要的其他信息。
答案 0 :(得分:4)
我认为您要做的不是返回带有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 processes in the background。
答案 1 :(得分:0)
您可以使用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功能here