首页 > 解决方案 > 从客户端发送的电子邮件响应以 php 保存到我的数据库

问题描述

我们在自己的 webapp 上有一个票务支持系统。用户登录到他们自己的仪表板,进入工单部分,插入带有主题和消息的新工单。当他们点击提交请求时,系统:

  1. 将用户参考、主题和消息保存到 MySQL 数据库
  2. 使用 phpmailer 向我们所有的技术人员发送电子邮件

当技术人员完成请求或需要用户提供更多信息时:

  1. 写对票部分的回应
  2. 一封电子邮件会自动发送给最终用户。

我们的 PhpMailer 脚本发送的电子邮件将自定义标头插入到电子邮件中,就像唯一的票证参考一样。

此时,最终用户会收到带有回复的电子邮件和一个按钮链接:“单击此处登录您的仪表板并回答此问题单”

所以最终用户需要重新登录才能回答这个问题。

我的问题是……

是否可以构建一个系统,用户可以使用我们的首选客户端(Outlook、Thunderbird 等)和我的 web 应用程序“拦截/识别”该电子邮件并将正文响应直接保存到我们的数据库中在包含的票证参考上?

我不明白从哪里开始?网上有例子吗?

标签: phpemailphpmailer

解决方案


正如@Peter 所说,这对于 SO 来说确实太宽泛了,但是,一个简单的例子可以为您指明正确的方向可能会有所帮助。

大多数邮件服务器允许您将入站电子邮件地址映射到脚本,这就是您在应用程序中提供电子邮件访问点所需要的。以 postfix 为例,最简单的方法是使用管道别名。Postfix 在 中有一个别名文件/etc/aliases,您需要添加一个将入站地址映射到脚本的条目:

support: "|/path/to/your/script.php"

然后运行newaliases以使 postfix 拾取它。请注意,这假定此 postfix 服务器已经在处理您的域,并且实际地址是support@yourdomain.com.

您需要确保您的脚本以“shebang”开头(告诉它如何运行脚本),并将其标记为可执行文件:

#!/usr/bin/env php
<?php
$outfile = fopen('emaillog.txt', 'a');
while (!feof(STDIN)) {
    fwrite($outfile, fread(STDIN, 1024));
}
fwrite($outfile, "\n\n");
fclose($outfile);
exit(0);

这个示例脚本(未经测试!)只是读取消息(显示在标准输入上)并将其附加到日志文件中,但当然你可以在这里做任何你喜欢的事情——连接到数据库、与 API 对话等。

然后将脚本标记为可执行,以便 postfix 可以运行它:

chmod +x /path/to/your/script.php

请注意运行此脚本的用户 - 该脚本由 postfix 运行,因此如果 postfix 用户需要写入文件,则需要适当的权限。

这里有一篇更全面的文章。


推荐阅读