公司开发了一个项目。当用户点击某个操作时,会发送两封邮件出去,当点击时,反应很慢,用户体验不好,而且导致重复提交。最后我想到用异步实现发邮件。开始想到是用队列来实现,就要安装个队列服务器,再三思考没必要这么弄。思路是当用户点击该操作时,将发送的邮箱、主题、内容写入到sqlite中,然后通过cron计划任务来实现发送邮件。仅此而已。
aysncmail.php:发送邮件cron.php每分钟执行一次。如何有记录 发送。发送后自动清除。
<?php
if ($db = sqlite_open('./mail.db', 0666, $sqliteerror))
{
}
else
{
die($sqliteerror);
}
$result = sqlite_query($db, 'SELECT mailto, subject,content FROM mail', SQLITE_ASSOC);
$num = sqlite_num_rows ($result);
if ($num <= 0)
{
exit;
}
else
{
while ($entry = sqlite_fetch_array($result, SQLITE_ASSOC))
{
sendmail($entry['mailto'], $entry['subject'], $entry['content']);
}
sqlite_exec($db, "delete from mail", $error);
}
?>
插入sqlite操作:
$a['a']='aaaaaaaaaa';
$ato=$a['a'];
$to = "mickelfeng@gmail.com";
$subject = "Course Reservation";
$tmessage = "Hi Teacher aaaaaaaaaaaa";
$from = "school@qq.com";
$header = "From:My Name<school@qq.com>\r\n";
$header .= "Reply-To: My Name<school@qq.com>\r\n";
$header .= "Return-Path: My Name<school@qq.com>\r\n";
$msg = "test;
$msg = iconv("GBK", "UTF-8", $msg);
if ($db = sqlite_open('./mail.db', 0666, $sqliteerror))
{
$sql= "insert into mail values('mickelfeng@163.com','$ato','$tmessage');";
sqlite_query($db, $sql);
}else{
echo "error";
}