如何使用PHP和MySQL通过cron job发送电子邮件

12

我成功地发送了多封邮件(点击这里)。现在我遇到了通过cron自动发送邮件的问题。

这是我需要的 - 当管理员发送电子邮件时,我将消息、电子邮件和事件日期存储在数据库中。现在我正在尝试设置一个cron任务,从表格中使用我已经拥有的消息向所有这些ID发送电子邮件作为提醒。我不熟悉cron任务脚本编写,可以有人帮我指导一下正确的编写脚本的方式,以便我可以将其放置在cron表中。我计划发送两封邮件 - 事件发生前一天和当天。谢谢

2个回答

11

只需编写一个普通的PHP脚本--如果从浏览器直接启动,则可以正常工作。然后按照以下指南,在cron中安排运行完全相同的PHP文件:

http://www.unixgeeks.org/security/newbie/unix/cron-1.html

基本上,使用开始处的值指定计划(分钟、小时、星期几、月份中的日期等)。然后设置它运行的用户,这可能是“apache”或您的Web服务器守护程序正在其中运行的任何内容。然后将 cron 运行的“命令”设置为 php php_email_script.php(其中“php_email_script.php”是您的 PHP 文件的名称)。


我以前也是这样做的,但根据我的经验,使用wget方法更容易维护,因为你仍然只有一个入口点。当然,你需要注意安全性的影响,所以为了保险起见,脚本不应该接受参数。 - mvds
嗨, 谢谢,我按照您的指示做了。它运行得很好!我将把答案(简单查询和邮件功能)发布为答案。我应该在“回答你的问题”下发布吗? - JDesigns
嗨,我回复很快,如果我的查询返回3条记录,日期在当前日期之后,它只会发送第一条记录的邮件,而不是其他的。我尝试了while循环,但没有帮助。有什么建议吗? - JDesigns
我会将这个问题发布为另一个问题,并以此获得帮助。听起来你的查询或while循环有问题。 - Nathan Loding

6

30分钟过去了还没有答案,这里有几个开放的方法:

  • cron从系统范围的/etc/crontab或你个人的crontab中读取规则,你可以使用crontab -e进行编辑
  • cron采用格式来指定哪一分钟/小时/日/月执行任务,可使用Google或man crontab查看格式
  • cron有一个神奇的副作用,即将命令的输出发送到拥有crontab的用户的邮箱中

现在你说你正在使用php。从cron运行php的最简单方法是发出一个wget -O - -q http://yoursite.com/yourprocessingscript.php?verysecret=123123并在yoursite.com上拥有一个适当的处理脚本。(你可能需要让该脚本检查$_SERVER['REMOTE_ADDR'])

总之,如果你只需在/etc/crontab中输入正确的命令,如下所示:

0 0 * * * jay wget -q -O - "http://yoursite.com/processmidnight.php?secret=yes_very"

如果您编写的脚本可以生成一些有意义的输出,您将收到一封发送到本地用户jay的邮件,您可能希望转发此邮件。


嗨,谢谢你的解释和以下的答案,帮助我朝着正确的方向前进。我很快就会发布我的成果。它运行得很好。谢谢。我尝试了curl方法,但我是通过在cron tab中调用php脚本来实现的。 - JDesigns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接