对于建站的“网管”,网站管理员的我们,有这样一些使用“邮件通知”的场景。
网站注册验证的邮件提醒;
网站登录密码找回的邮件发送;
网站的表单提交后的邮件提醒;
......
因为之前在织梦系统中的自定义表单功能很方便实现用户“表单提交”,网站管理员在织梦后台查看用户提交数据。可是有时候总是晚点才看到网站表单留言。加上这次在使用zblog建站中,需要实现表单提交后有邮件通知的功能,zblog没有表单功能,相比实现邮件提醒功能要比织梦麻烦,每个人实现方法不一样,我采用自己创建留言表数据库,并将用户提交的表单数据发送到网站管理员的指定邮箱。
一、网站“邮件提醒”两大步骤,可以实现功能。
1、准备:发件、收件邮箱,PHPMailer代码库。
2、编写代码,开始发邮件测试。
原理:用PHPMailer发送邮件(在PHP程序中发送邮件的方式有许多,在本文选择PHPMailer的方式)
二、步骤开始
1、准备PHPMailer类库
PHPMailer下载地址:https://github.com/PHPMailer/PHPMailer/(调试代码有许多错误,修改后的代码,本人整理好的文件包下载地址)
提示:要对应下载版本,避免错误。
目前官方库文件包:
链接:https://pan.baidu.com/s/1FFf-jP-pW3uxCryHZWMWLw
提取码:af8r
本人本次使用的文件包:
织梦系统
链接:https://pan.baidu.com/s/1sLbQmjxcTb77uI4j-BMHpQ
提取码:pgzu
zblog系统
链接:https://pan.baidu.com/s/1pORXVgwyl2jkdRMCn99Bgg
提取码:f05v
2、准备发送邮件的邮箱
在发送邮件功能中,现在常见的是谷歌邮箱、163邮箱、QQ邮箱。本文以QQ邮箱为例。
必须开通了邮箱的IMAP/SMTP服务,才能用于发送邮件。
登录QQ邮箱,分别进入“设置”,“账户”。
来到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务:
会提示你邮件系统升级需要发送短信,发送后会弹出授权码。
成功开启IMAP/SMTP服务,在第三方客户端登录时,授权码就是密码。
记得点击“保存更改”按钮。
3、准备一个接受邮件的邮箱,用于发送邮件测试。
4、将PHPMailer库文件放入网站目录中。
这里我分别就织梦系统和zblog博客系统进行代码改造说明。
首先可以看看官方的代码
一个简单的例子
<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
// Load Composer's autoloader
require 'vendor/autoload.php';
// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output
$mail->isSMTP(); // Send using SMTP
$mail->Host = 'smtp1.example.com'; // Set the SMTP server to send through
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'user@example.com'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
$mail->Port = 587; // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
//Recipients
$mail->setFrom('from@example.com', 'Mailer');
$mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient
$mail->addAddress('ellen@example.com'); // Name is optional
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
// Attachments
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
// Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
另一个学习例子,将封装成一个php的函数,在需要发送邮件的地方直接调用。
/**
* 发送邮件
* @param $msg string 发送的内容
* @author d
*/
function emailTo($msg){
//引入PHPMailer的核心文件
Vendor('PHPMailer.src.PHPMailer');
Vendor('PHPMailer.src.SMTP');
//实例化PHPMailer核心类
$mail = new PHPMailer();
//是否启用smtp的debug进行调试 默认关闭debug调试模式
//$mail->SMTPDebug = 1;
//使用smtp鉴权方式发送邮件
$mail->isSMTP();
//smtp需要鉴权 这个必须是true
$mail->SMTPAuth = true;
//链接qq域名邮箱的服务器地址,qq的是smtp.qq.com;阿里云的是smtp.aliyun.com
$mail->Host = 'smtp.example1.com;smtp.example2.com;';
//设置使用ssl加密方式登录鉴权
$mail->SMTPSecure = 'ssl';#阿里的'tls'
//设置ssl连接smtp服务器的远程服务器端口号
$mail->Port = 465;#阿里的587
//设置发送的邮件的编码
$mail->CharSet = 'UTF-8';#这个必须设置,好像默认的是iso-8859-1,不设置的话中文会乱码
//设置发件人昵称 显示在收件人邮件的发件人邮箱地址前的发件人姓名
$mail->FromName = '哈哈';
//smtp登录的账号 QQ邮箱即可
$mail->Username = '发送邮件的邮箱';
//smtp登录的密码 使用生成的授权码
$mail->Password = 'xgebhzosormtbfba';#此授权码已失效
//设置发件人邮箱地址 同登录账号
$mail->From = '发送邮件的邮箱';
//邮件正文是否为html编码
$mail->isHTML(true);
//设置收件人邮箱地址
$mail->addAddress('接收邮件的邮箱,如果会变,则需要在参数中传入');
//添加多个收件人 则多次调用方法即可
//$mail->addAddress('其他接收邮件的邮箱');
//添加该邮件的主题
$mail->Subject = '邮件的主题';
//添加邮件正文
$mail->Body = $msg;
//为该邮件添加附件
//$mail->addAttachment('./example.pdf');
//发送邮件 返回状态
return $mail->send();
}
三、织梦表单邮件提醒
3.1、织梦后台填写信息
在织梦后台的“系统”“系统设置”“核心设置”
网站发信EMAIL:QQ邮箱
接下来继续填写
3.2、代码改造
3.2.1、添加PHPMailer的库文件到/plus目录下面:
3.2.2、在织梦的自定义表单文件diy.php(路径:/plus/diy.php)中的代码$id = $dsql->GetLastID();上面添加如下代码:
//邮件发送
$fieldlist = $diy->getFieldList();
$addvalue_ary1 = explode(',', $addvalue);
$addvalue_ary = array_filter($addvalue_ary1);
$i = 1;
foreach($fieldlist as $field=>$fielddata)
{
$emailbody .= $fielddata[0].':'.$addvalue_ary[$i].'<br/>';
$i ++;
}
global $cfg_smtp_server, $cfg_adminemail, $cfg_smtp_port, $cfg_smtp_usermail, $cfg_smtp_password, $cfg_webname, $cfg_basehost, $cfg_smtp_user;
require_once("class.phpmailer.php");
require_once("class.smtp.php");
//实例化PHPMailer
$mail = new PHPMailer();
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->SMTPAuth=true;
$mail->Host = "ssl://smtp.qq.com";
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
//发件人的主机域,自定义的内容
$mail->Hostname = "XX网络";
$mail->CharSet = 'UTF-8';
//发件人姓名
$mail->FromName =网站管理员;
//smtp登录的账号qq号
$mail->Username = qq号;
//密码就是授权码
$mail->Password = 授权码;
//发件人邮箱
$mail->From = "qq邮箱";
$mail->isHTML(true);
//收件人邮箱地址,第一参数邮箱地址 第二昵称;可多次调用就是多个收件人的邮箱
$mail->addAddress("XX@qq.com","XX公司");
//邮件主题
$mail->Subject = "网站留言提醒";
//表单内容
$mail->Body = $emailbody;
if(!$mail->send())
{
echo "Fail to send. <p>";
echo "Cause of the error: " . $mail->ErrorInfo;
exit;
}
//邮件结束
在网页提交表单,实现织梦发送邮件功能。
四、zblog程序邮件提醒
4.1、创建mysql数据表
代码如下,仅仅是示例代码,具体根据自己网站业务。
--
-- 表的结构 `zbp_mesage`
--
CREATE TABLE `zbp_mesage` (
`key` int(11) NOT NULL,
`mes_name` char(30) DEFAULT NULL,
`mes_phone` char(11) NOT NULL,
`mes_mesage` varchar(400) DEFAULT NULL,
`mes_time` char(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- 转存表中的数据 `zbp_mesage`
--
INSERT INTO `zbp_mesage` (`key`, `mes_name`, `mes_phone`, `mes_mesage`, `mes_time`) VALUES
(1, 'nicheng', '13030305050', '这是留言内容', '2020-5-11 12:40:35'),
(2, NULL, '15263635252', NULL, '2020-5-11 12:7:42'),
(3, '小智', '13063635252', '留言内容2', '2020-5-11 13:44:42');
4.2、HTML页面的表单提交代码
<form action="./insert.php" method="post" enctype="multipart/form-data" onsubmit="return checkPhone()">
<input type="text" placeholder="联系电话" name="mes_phone" id="mes_phone">
<textarea type="text" placeholder="留言内容" name="mes_mesage" id="mes_mesage"></textarea>
<input name="mytime" value="" type="hidden" id="mytime" />
<script type="text/javascript">
window.onload = function(){
var nowDate = new Date();
var str = nowDate.getFullYear()+"-"+(nowDate.getMonth() + 1)+"-"+nowDate.getDate()+" "+nowDate.getHours()+":"+nowDate.getMinutes()+":"+nowDate.getSeconds();
document.getElementById("mytime").value=str;
}
</script>
<input type="submit" id="isubmit" name="submit" value="点击通话" class="formSub">
</form>
4.3、存储到数据库的PHP处理文件
前台表单提交后的PHP处理页面,实现接受表单数据并发送邮件。
<?php
// allen 20.05.10
// url taizidian.cn
header('Content-Type: application/json');
header("Content-Type: text/html;charset=utf-8");
// error_reporting(0);
require './phpmailer/PHPMailerAutoload.php';
$name = $_POST['mes_name'];
$phone = $_POST['mes_phone'];
$mesage = $_POST['mes_mesage'];
$mes_time = $_POST['mytime'];
$con = mysqli_connect('IP','用户名','密码','数据库');
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"数据库");
mysqli_set_charset($con, "utf8");
// 插入数据
$sql="INSERT INTO `zbp_mesage` (`key`,`mes_name`,`mes_phone`,`mes_mesage`,`mes_time`) VALUES (NULL,'$name','$phone','$mesage','$mes_time')";
$res = mysqli_query($con,$sql);
if($res){
// echo "<br/>插入成功";
} else {
// echo "<br/>插入失败";
}
mysqli_close($con);
// 邮件发送
$mail = new PHPMailer();
$mail->SMTPDebug = 0;
$mail->isSMTP(); // 使用SMTP服务
$mail->CharSet = "utf8";
$mail->Host = "ssl://smtp.qq.com"; // 发送方的SMTP服务器地址
$mail->SMTPAuth = true; // 是否使用身份验证
$mail->Username = "用户名"; // 发送方邮箱用户名
$mail->Password = "xxx"; // 发送方的邮箱授权码
$mail->SMTPSecure = "ssl"; // 使用ssl协议方式
$mail->Port = 465; // 163邮箱的ssl协议方式端口号是465/994
$mail->setFrom("xxxx@qq.com","管理员"); // 设置发件人信息
$mail->addAddress("xx@qq.com",""); // 设置收件人信息,可设置多个,复制粘贴此行修改邮箱地址即可
// $mail->addReplyTo("xx@qq.com","Reply"); // 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址
//$mail->addCC("xx9@qq.com"); // 设置邮件抄送人,可以只写地址,上述的设置也可以只写地址
//$mail->addBCC("xxx@qq.com"); // 设置秘密抄送人
//$mail->addAttachment("img.jpg"); // 添加附件
$mail->Subject = "网站收到新留言啦!"; // 邮件标题
$mail->Body = "姓名:".$name."
电话:".$phone."
内容:".$mesage."
时间:".$mes_time;
if(!$mail->send()){// 发送邮件
echo "Message could not be sent.";
echo "Mailer Error: ".$mail->ErrorInfo; // 输出错误信息
}else{
echo"<script>alert('表单提交成功的提示');history.go(-1);</script>";
}
4.4、显示全部表单留言的PHP处理文件
<?php
header('Content-Type: application/json');
header("Content-Type: text/html;charset=utf-8");
// error_reporting(0);
require './phpmailer/PHPMailerAutoload.php';
$name = $_POST['mes_name'];
$phone = $_POST['mes_phone'];
$mesage = $_POST['mes_mesage'];
$con = mysqli_connect('地址','用户','密码','数据库');
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"数据库");
mysqli_set_charset($con, "utf8");
// 输出数据
$sql = "select * from zbp_mesage";
$result = mysqli_query($con,$sql);
echo "<table border='1'>
<tr>
<th>ID</th>
<th>姓名</th>
<th>手机号</th>
<th>留言内容</th>
<th>留言时间</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['key'] . "</td>";
echo "<td>" . $row['mes_name'] . "</td>";
echo "<td>" . $row['mes_phone'] . "</td>";
echo "<td>" . $row['mes_mesage'] . "</td>";
echo "<td>" . $row['mes_time'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
这样独立于网站程序,可以单独上传文件到服务器文件夹使用。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫
2020/05/13 09:12 沙发
很有帮助,谢谢!