ausheng

用PHPMailer发送网站邮件和简单验证

准备工作:

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">发&nbsp;&nbsp;送</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

ausheng

爱生活,爱编程

AUSHENG – BLOG

不要害羞,保持联系。我们喜欢结识有趣的人,结交新朋友。