php定时自动发送邮件(从数据库取数据)(超详细版本)

目录

一·下载sendmail解压保存(记住路径)

二·配置php.ini(php工具箱或wampserver)

三·配置sendmail.ini

四·编写代码

(1)初步实现发送邮件

(2)邮件持续定时发送

(3)解决不能停止的问题

(4)从数据库中提取数据并应用

五·总代码

实现总代码:delete.php(控制开关的文件)+main.php(主程序文件)


一·下载sendmail解压保存(记住路径)

二·配置php.ini(php工具箱或wampserver)

Ctrl+f搜索Mail function关键字

​
SMTP = smtp.qq.com    

//SMTP = smtp邮箱地址(QQ邮箱是smtp.qq.com, l63邮箱是smtp.163.com)

smtp_port = 25

sendmail_from =2223098767@qq.com     //使用的邮箱地址

sendmail_path ="E:\wamp\wamp64\sendmail\sendmail.exe -t"  //刚刚sendmail解压的目录

​

三·配置sendmail.ini

//QQ邮箱不能直接使用密码,要使用QQ授权码
什么是授权码,它又是如何设置?_QQ邮箱帮助中心https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

[sendmail]

smtp_server=smtp.qq.com 

smtp_port=25

auth_username =2223098767@qq.com  //使用的邮箱地址

auth_password=QQ邮箱授权码

force_sender=2223098767@qq.com  //使用的邮箱地址

四·编写代码

(1)初步实现发送邮件

邮箱的主题必须使用,

$subject ="=?utf-8?B?".base64_encode("测试")."?=";//邮件主题

 不然会出现中文乱码

$to ="3215530073@qq.com";//发送邮件的目的邮箱
$subject ="=?utf-8?B?".base64_encode("测试")."?=";//邮件主题
$message ="测试";//邮件内容
$from = "2223098767@qq.com";
$headers = "From: $from";
$result = mail($to,$subject,$message,$headers);

(2)邮件持续定时发送

 (这时你会发现,关了浏览器程序还在运行,没法关闭php程序???????)

<?php
ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.
set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60; // 设置的时间间隔
//使用do....while+sleep()以达到定时效果
do{
//发送邮件部分
$to ="3215530073@qq.com";//发送邮件的目的邮箱
$subject ="=?utf-8?B?".base64_encode("测试")."?=";//邮件主题
$message ="测试";//邮件内容
$from = "2223098767@qq.com";
$headers = "From: $from";
$result = mail($to,$subject,$message,$headers);
sleep($interval); //应用时间间隔
}while(true);
?>

(3)解决不能停止的问题

用外部的数据(delete.php)进行跳出

//delete.php
<?php
$decide['switch']="false";
?>
//主程序文件
<?php
ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.
set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60; // 设置的时间间隔
//使用do....while+sleep()以达到定时效果
do{

include('decide.php'); // 引入文件
if($decide['switch']=="false") break;


//发送邮件部分
$to ="3215530073@qq.com";//发送邮件的目的邮箱
$subject ="=?utf-8?B?".base64_encode("测试")."?=";//邮件主题
$message ="测试";//邮件内容
$from = "2223098767@qq.com";
$headers = "From: $from";
$result = mail($to,$subject,$message,$headers);
sleep($interval); //应用时间间隔
}while(true);
?>

(4)从数据库中提取数据并应用

我实现的是数据取出后,将数据删除

        读取数据库表中信息使用的是

$sql = "select * from xx limit 1";//只读取表中的第一行

        删除数据库表中信息使用的是

$ee="delete from xx where id="."'".$row["id"]."'";

五·总代码

实现总代码:delete.php(控制开关的文件)+main.php(主程序文件)

//控制开关的文件
<?php
$decide['switch']="false";
?>
//主程序文件
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php

ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.
set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60; // 设置的时间间隔

//连接数据库部分

$servername = "localhost";
$username = "root";
$password = "123";
$dbname = "mail";
$conn = new mysqli($servername, $username, $password, $dbname);// 创建连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);// 检测连接
} 
$decide="";
do{
include('decide.php'); // 引入文件
if($decide['switch']=="false") break;
//读取数据库表中数据
$a=null;
$sql = "select * from xx limit 1";
$result=$conn->query($sql);
$row=mysqli_fetch_assoc($result);
$a=$row["content"];
$b=$row["order"];
//将读取过得信息删除
$ee="delete from xx where id="."'".$row["id"]."'";
$rr=mysqli_query($conn,$ee);

//发送邮件部分
$to ="3215530073@qq.com";//发送邮件的目的邮箱
$subject ="=?utf-8?B?".base64_encode($b)."?=";//邮件主题
$message =$a;//邮件内容
$from = "2223098767@qq.com";
$headers = "From: $from";
$result = mail($to,$subject,$message,$headers);
sleep($interval); //应用时间间隔
}while(true);

?>

本文参考文件:

1.php定时发送邮件解决方案2.PHP mail()本地邮箱服务器搭建全过程

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值