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

前端学习219.5K1字数 5200阅读17分20秒阅读模式

日常接触的网页,大多数是PHP开发的。而网站上少不了联系方式,PHP内置了Mail()函数,通过简单的代码,可以实现发送邮件的功能!但不方便的是一来需要编写大量的代码,存在注入等安全问题,需要邮件系统的支持才可以。下面介绍一个用PHPMailer实现“给我发送邮箱”功能,并使用jQuery Validate 插件为表单内容进行简单的验证。最下方有个GIF效果演示

用PHPMailer发送网站邮件和简单验证文章源自亦枫博客-https://yflad.cn/2259.html

PHPMailer是一个用于发送电子邮件的PHP电子邮件创建和传输类。直接用PHP就可以发送,无需搭建复杂的Email服务。使用它可以更加便捷的发送邮件,免去很多额外的麻烦。通过调用相关函数可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。文章源自亦枫博客-https://yflad.cn/2259.html

 文章源自亦枫博客-https://yflad.cn/2259.html

准备工作:

1、下载代码:https://github.com/PHPMailer/PHPMailer/文章源自亦枫博客-https://yflad.cn/2259.html

在官方上提供了很详细的使用手册和案例。有兴趣的也可以看看文章源自亦枫博客-https://yflad.cn/2259.html

 文章源自亦枫博客-https://yflad.cn/2259.html

2、因为是SMTP发信,按照官方的介绍,所以只需要src下的三个文件。当然如果有需要,可以把[code]language[/code] 下的[code]phpmailer.lang-zh_cn.php[/code]的语言包也复制过去文章源自亦枫博客-https://yflad.cn/2259.html

用PHPMailer发送网站邮件和简单验证文章源自亦枫博客-https://yflad.cn/2259.html

 文章源自亦枫博客-https://yflad.cn/2259.html

3、PHP环境文章源自亦枫博客-https://yflad.cn/2259.html

大部分的集成环境默认都是开启sockets和openssl 的,如果是没有开启的,可以在php.ini开启文章源自亦枫博客-https://yflad.cn/2259.html

用PHPMailer发送网站邮件和简单验证 用PHPMailer发送网站邮件和简单验证文章源自亦枫博客-https://yflad.cn/2259.html

 文章源自亦枫博客-https://yflad.cn/2259.html

部署:

准备工作做完就可以准备代码了文章源自亦枫博客-https://yflad.cn/2259.html

1、在此我们需要一个发送账号和一个接收邮箱,当然你也可以用一个,自己发给自己。不过并不建议,发送账号需要密码或者QQ的授权码,很容易泄漏。文章源自亦枫博客-https://yflad.cn/2259.html

QQ需要开启SMTP服务,获取生成的授权码,网上有很多教程。我用的是阿里云企业邮箱。所以就不介绍QQ的SMTP的开启方法了文章源自亦枫博客-https://yflad.cn/2259.html

 文章源自亦枫博客-https://yflad.cn/2259.html

2、在阿里云企业邮箱管理后台分发一个账号文章源自亦枫博客-https://yflad.cn/2259.html

 文章源自亦枫博客-https://yflad.cn/2259.html

3、为了界面美化和响应式,我引用了bootstrap,相关的文件我已经打包在蓝奏云上,可以在最下面下载。相关的注释也已经注明文章源自亦枫博客-https://yflad.cn/2259.html

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发送网站邮件和简单验证

 

小结

本文只是简单的介绍了利用PHPMailer实现网站的发送邮件功能,还有很多可以优化的地方。实际的生产环境还需要些判断和安全措施,比如垃圾邮件的处理,防恶意邮件。并不建议直接复制粘贴上面的代码,用于线上项目。哪天谁闲的没事就一直给你刷邮件吧,哈哈

全完结束,欢迎指教。感谢阅读!

下载信息 给我发邮件 PHP Test 1.0 116 KB
最近更新2019-7-18
下载地址
继续阅读
扫扫关注公众号
weinxin
我的微信
扫扫体验小程序
weinxin
我的公众号
亦枫
  • 本文由 发表于 2019年4月3日 10:47:20
评论  2  访客  1  作者  1
    • jing
      jing 0

      你好,php编辑器中代码和汉字的字体看着挺漂亮的,请问是什么字体?

        • 亦枫
          亦枫

          @ jing Microsoft YaHei”,Helvetica,Arial,Lucida Grande,Tahoma,sans-serif

      匿名

      发表评论

      匿名网友 填写信息

      :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

      确定