我有一个使用Slim路由框架构建的PHP应用程序.该应用程序需要从订单发送动态电子邮件,以便用户可以仅响应这些电子邮件,并且响应直接返回到应用程序(存储在MySQL中).我可以轻松地为每个订单创建动态地址,结果很好.我的问题是找回来.
我设置了一个子域(mailer.example.com),并在cPanel中设置了一个转发器,以捕获到该子域的所有邮件并将其转发到特定的PHP文件.该php文件读取stdin并获取mime消息,当前将其写入文件:
#!/usr/bin/php -q
// 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 processes in the background.
标签:email,php
来源: https://codeday.me/bug/20191025/1931177.html
作者分享了如何使用Slim框架构建的PHP应用通过子域名接收邮件,并将其转发到处理脚本。遇到的问题在于如何正确发送请求到应用程序进行后续处理,包括数据库操作。解决方案是使用cURL发起HTTP请求,而非仅返回Location标头。

被折叠的 条评论
为什么被折叠?



