用PHP发送邮件的干净安全的方式

时间:2014-03-07 19:32:52

标签: php ajax cron mailing periodic-task

我正在研究用SPALaravel4编写的完整AJAX邮件应用程序(AngularJS),用户可以在其中创建消息并将其发送到定义的联系人组。

问题是负责发送邮件的任务可能需要很长时间,所以我必须在后台运行它。

我想提供的主要功能是“开始”和“停止”整个邮件任务的能力,在这一刻我被卡住了......

我在考虑两种方法:

1。只要在浏览器中通过“ajaxes”

打开应用程序,就发送邮件

发送过程可能如下:

  1. 用户点击“开始”按钮
  2. 应用程序运行ajax发送一条消息的请求
  3. 当前一个请求成功时,下一个请求被激活(在检查用户之前是否没有停止它之后)等等
  4. 当用户点击“停止”按钮时,应用程序会发送另一个标记邮件停止的请求
  5. 这种方法可以让我更多地控制“开始”和“停止”整个发送过程以及一些统计数据,例如为用户更新整个发送的进度条。

    但主要的限制是发送了很长时间...假设超过一个小时或者那样......?用户不应该被迫仍然打开浏览器,否则邮件将被停止...... :(或者页面刷新...:/(我知道我可以在javascript中使用onunload事件,但它不优雅溶液)

    2。使用>通过ajax运行artisan命令; / dev / null 2> / dev / null& (无需等待命令输出)

    这次可能看起来像这样:

    1. 用户点击“开始”按钮
    2. 应用程序使用以下命令发出ajax请求:

      exec('php'.base_path()。'/ artisan mailing:send 1> / dev / null 2> / dev / null&');

    3. 应用程序返回200响应代码,用于通知shell任务已成功运行

    4. 在这种方法中,我不知道如何停止以前启动的任务shell ...有什么方法可以从以前的操作中获取runnable进程的“pid”吗?而且我不想“杀死”因为它可能会破坏发送数据......

      3。众所周知的cron工作

      有了这个,我担心重复的任务,当运行cronjobs的时间间隔将缩短...而当iterval将长期时,未使用的资源......

1 个答案:

答案 0 :(得分:0)

对我来说,如果您可以访问服务器中的shell,最好的方法是使用后台长期运行的任务(如守护进程)。您可以使用某种命令队列与任务进行通信,例如通过数据库中的内存表。

如果你已经用PHP编写了所有内容(或者想使用单一语言),你可以使用php-cli。