准备工作:
1、下载代码:
https://github.com/PHPMailer/PHPMailer/ 在官方上提供了很详细的使用手册和案例。有兴趣的也可以看看
2、因为是SMTP发信,按照官方的介绍,所以只需要src下的三个文件。
当然如果有需要,可以把language
下的phpmailer.lang-zh_cn.php
的语言包也复制过去
3、PHP环境
大部分的集成环境默认都是开启sockets和openssl 的,如果是没有开启的,可以在php.ini开启
准备工作做完就可以准备代码了
1、在此我们需要一个发送账号和一个接收邮箱,当然你也可以用一个,自己发给自己。不过并不建议,发送账号需要密码或者QQ的授权码,很容易泄漏。
QQ需要开启SMTP服务,获取生成的授权码,网上有很多教程。我用的是阿里云企业邮箱。所以就不介绍QQ的SMTP的开启方法了
2、在阿里云企业邮箱管理后台分发一个账号
3、为了界面美化和响应式,我引用了bootstrap,相关的文件我已经打包在蓝奏云上,可以在最下面下载。相关的注释也已经注明
1)需要引入的css和js:
<!-- Bootstrap -->
<link rel="stylesheet" href="css/bootstrap.min.css">
<!-- jQuery -->
<script src="js/jquery-3.3.1.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.validate.min.js"></script>
2)表单HTML代码如下:
<div class="col-md-8 col-md-offset-2">
<h4 class="text-center">给我发邮件</h4>
<form action="javascript:" id="signupForm" method="post">
<div class="form-group row formyf">
<div class="col-md-6">
<label for="exampleInputName">您的称呼:</label>
<input type="text" class="form-control" id="exampleInputName" name="exampleInputName"
placeholder="大于两个字符">
</div>
<div class="col-md-6">
<label for="exampleInputEmail1">您的邮箱:</label>
<input type="email" class="form-control" id="exampleInputEmail1" name="exampleInputEmail1"
placeholder="em@yflad.cn">
</div>
</div>
<div class="form-group">
<label class="left-block" for="exampleInputLink">留言内容:</label>
<textarea class="form-control" rows="3" id="exampleInputLink" name="exampleInputLink"></textarea>
</div>
<span class="help-block text-center" id="result_msg"></span>
<button type="submit" id="ebtn" class="btn btn-primary center-block">发 送</button>
</form>
</div>
3)JS验证代码:
$.validator.setDefaults({
submitHandler: function () {
$('#ebtn').click(function () {
var exampleInputName = $('#exampleInputName').val();
var exampleInputEmail1 = $('#exampleInputEmail1').val();
var exampleInputLink = $('#exampleInputLink').val();
$.ajax({
type: "post",
url: "phpmail/mail.php", //phpmailer 发送邮件方法,需要改成你自己的地址
data: {
exampleInputName: exampleInputName,
exampleInputEmail1: exampleInputEmail1,
exampleInputLink: exampleInputLink
},
dataType: "json",//回调函数接收数据的数据格式
success: function (msg) {
var data = '';
if (msg !== '') {
data = eval("(" + msg + ")");
}
if (data.su === 'success') {
$('#result_msg').html("您的邮件已经发送成功!");
} else {
$('#result_msg').html("Sorry,服务器可能出了些问题。可以按照上面的方式联系哦!");
}
console.log(data);
},
error: function (msg) {
console.log(msg);
}
});
})
}
});
$(document).ready(function () {
$("#signupForm").validate({
rules: {
exampleInputName: {
required: true,
minlength: 2
},
exampleInputEmail1: {
required: true,
email: true
},
exampleInputLink: {
required: true,
minlength: 2
}
},
messages: {
exampleInputName: {
required: "请输入您的称呼",
minlength: "您的称呼必须至少包含2个汉字"
},
exampleInputEmail1: "请输入有效的电子邮件地址",
exampleInputLink: {
required: "请输入您要告知的内容",
},
},
errorElement: "em",
errorPlacement: function (error, element) {
error.addClass("text-danger");
if (element.prop("type") === "checkbox") {
error.insertAfter(element.next("label"));
} else {
error.insertAfter(element);
}
}
});
});
4)PHP发送邮件方法:
<?php
/**
* @Author: yflad (em@yflad.cn)
* @Blog: https://yflad.cn
* @Date: 2019-04-02
* @Role: 发送邮件方法
*/
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
require_once 'src/PHPMailer.php';
require_once 'src/Exception.php';
require_once 'src/SMTP.php';
function sendMail($to, $title, $content)
{
$mail = new PHPMailer();
//是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
$mail->SMTPDebug = 0;
//使用smtp鉴权方式发送邮件
$mail->isSMTP();
//smtp需要鉴权 这个必须是true
$mail->SMTPAuth = true;
//邮箱的服务器地址
$mail->Host = 'smtp.mxhichina.com'; // 此处为阿里云企业。QQ:smtp.qq.com,网易:stmp.163.com
//设置使用ssl加密方式登录鉴权
$mail->SMTPSecure = 'ssl';
//设置ssl连接smtp服务器的远程服务器端口号,默认是25,SSL填 465或587
$mail->Port = 465;
//设置发送的邮件的编码
$mail->CharSet = 'UTF-8';
//设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名
$mail->FromName = '亦枫博客';
//smtp登录的账号
$mail->Username = 'XXX@mail.yflad.cn';
//smtp登录的密码 QQ则使用生成的授权码(上文有提过)
$mail->Password = 'XXXXX';
//设置发件人邮箱地址 同登录的账号
$mail->From = 'XXX@mail.yflad.cn';
//邮件正文是否为html编码 true或false
$mail->isHTML(true);
//设置收件人邮箱地址,第一个参数为收件人邮箱地址,第二参数为给该地址设置的昵称,可以省略
$mail->addAddress($to, '亦枫博客');
//添加多个收件人 则多次调用方法即可
// $mail->addAddress('XX@yflad.cn','亦枫');
//添加该邮件的主题
$mail->Subject = $title;
//添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件
$mail->Body = $content;
//为该邮件添加附件。第一个参数为附件存放的目录(相对目录、或绝对目录均可),第二参数为在邮件附件中该附件的名称。简单的使用,不建议使用该函数
// $mail->addAttachment('Update','Demo.jpg');
//同样该方法可以多次调用 上传多个附件
// $mail->addAttachment('../pic/Update','Demo2.png');
/*简单的判断一下*/
$status = $mail->send();
if ($status) {
$su = "success";//给su赋值“success”;
} else {
$su = "";
}
$data = '{su:"' . $su . '"}';//只返回su变量值来判断是否发送成功,其它值不返回
echo json_encode($data);
}
/**
* 这是是你要收件的邮箱,可以自定义邮箱模版。可以参考亦枫博客的 “评论回复邮件模版”
* 不过也就自己看,没有多大需求
*/
$to = 'XX@yflad.cn';
$title = '老大,有一封来自介绍网站的邮件';
$content = '发件人:' . $_POST['exampleInputName'] . '<br><br>发件人的邮件/电话:' . $_POST['exampleInputEmail1'] . '<br><br>内容:' . $_POST['exampleInputLink'];
sendMail($to, $title, $content);
界面效果展示和测试:
小结
本文只是简单的介绍了利用PHPMailer实现网站的发送邮件功能,还有很多可以优化的地方。实际的生产环境还需要些判断和安全措施,比如垃圾邮件的处理,防恶意邮件。并不建议直接复制粘贴上面的代码,用于线上项目。哪天谁闲的没事就一直给你刷邮件吧,哈哈
全完结束,欢迎指教。感谢阅读!
dome下载https://lanzoui.com/i3n7jah 密码:39jj