PHP发送邮件功能要使用mailer函数包,我们需要进行下载
下载后,需要将Exception.php、PHPMailer.php及SMTP.php三个文件放在你的项目目录下。
同时,我们还要去对应邮箱的客户端去配置邮箱服务。这里我以126邮箱为例。
再在侧导航栏的POP3/SMTP/IMAP中开启服务即可 。
要保存好SMTP码!!!
下面是我们的代码部分:
$email = $_GET["email"];
$to = $email; //从GET参数中获取用户提交的邮箱地址赋值给$to
function sendMail($to, $subject, $content): bool
{
$mail = new PHPMailer(true); // 创建一个新的PHPMailer实例
try {
$mail->isSMTP(); // 设置邮件发送方式为SMTP
$mail->Host = 'smtp.163.com'; // 设置SMTP服务器地址
//(QQ邮箱:smtp.qq.com,谷歌:smtp.gmail.com)
$mail->SMTPAuth = true; //启用SMTP身份验证
$mail->Username = '填写你的SMTP用户名'
$mail->Password = '填写SMTP密码';
$mail->SMTPSecure = 'ssl'; //加密方法
$mail->Port = 465; //服务端口,不同品牌邮箱服务端口可百度查看
$mail->CharSet = 'UTF-8'; //设置邮件字符编码
// 邮件内容设置
$mail->setFrom('填写发送消息的邮箱号', '填写发送信息的用户名'); //发件人信息
$mail->addAddress($to); // 收件人邮箱地址
$mail->isHTML(true); //设置邮件内容为HTML格式
$mail->Subject = $subject; //设置邮件主题
$mail->Body = $content; //设置邮件正文内容
// 发送邮件
$mail->send();
return true;
} catch (Exception $e) {
return false;
}
}
}
// 生成6位随机数作为验证码
$code = rand(100000, 999999);
$expireTime = time() + 180;
$encryptedCode = encrypt($code);
//加密验证码
function encrypt($data): string
{
$key = '填写密钥';
return base64_encode(openssl_encrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA));
//使用AES-128-ECB算法对数据进行加密,并对加密后的结果进行Base64编码,将加密结果转换为字符串
}
$last_send_time = $_SESSION['last_send_time'] ?? 0; // 获取上一次发送邮件的时间戳,默认为0
// 判断是否距离上一次发送邮件的时间小于180秒(3分钟),且上一次发送邮件的收件人与当前收件人相同
if (time() - $last_send_time < 180 && isset($_SESSION['last_send_to']) && $_SESSION['last_send_to'] == $to) {
echo '<script>alert("获取频繁,稍后重试");</script>'; //如果是,则弹窗提醒
exit;
}
// 发送邮件
$subject = '填写邮件主题';
$content = '填写邮件内容:' //如果需要发送验证码,可直接引用变量$code
if (sendMail($to, $subject, $content)) {
echo '<script>alert("验证码已发送,请注意查收");</script>';
$_SESSION['last_send_time'] = time(); // 更新上一次发送邮件的时间为当前时间戳
$_SESSION['last_send_to'] = $to; // 更新上一次发送邮件的收件人为当前收件人
} else {
echo '邮件发送失败';
}