手机版

用PHPMailer在网站上实现“给我发送邮箱”功能和简单的表单验证

2019-09-01 阅读 :

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

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

准备工作:

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:  

  1. <!-- Bootstrap -->
  2. <link rel="stylesheet" href="css/bootstrap.min.css">
  3. <!-- jQuery -->
  4. <script src="js/jquery-3.3.1.min.js"></script>
  5. <script src="js/bootstrap.min.js"></script>
  6. <script src="js/jquery.validate.min.js"></script>

 

2)表单HTML代码如下:  

  1. <div class="col-md-8 col-md-offset-2">
  2. <h4 class="text-center">给我发邮件</h4>
  3. <form action="javascript:" id="signupForm" method="post">
  4. <div class="form-group row formyf">
  5. <div class="col-md-6">
  6. <label for="exampleInputName">您的称呼:</label>
  7. <input type="text" class="form-control" id="exampleInputName" name="exampleInputName"
  8. placeholder="大于两个字符">
  9. </div>
  10. <div class="col-md-6">
  11. <label for="exampleInputEmail1">您的邮箱:</label>
  12. <input type="email" class="form-control" id="exampleInputEmail1" name="exampleInputEmail1"
  13. placeholder="em@yflad.cn">
  14. </div>
  15. </div>
  16. <div class="form-group">
  17. <label class="left-block" for="exampleInputLink">留言内容:</label>
  18. <textarea class="form-control" rows="3" id="exampleInputLink" name="exampleInputLink"></textarea>
  19. </div>
  20. <span class="help-block text-center" id="result_msg"></span>
  21. <button type="submit" id="ebtn" class="btn btn-primary center-block">发&nbsp;&nbsp;送</button>
  22. </form>
  23. </div>

 

3)JS验证代码:

  1. $.validator.setDefaults({
  2. submitHandler: function () {
  3. $('#ebtn').click(function () {
  4. var exampleInputName = $('#exampleInputName').val();
  5. var exampleInputEmail1 = $('#exampleInputEmail1').val();
  6. var exampleInputLink = $('#exampleInputLink').val();
  7. $.ajax({
  8. type: "post",
  9. url: "phpmail/mail.php", //phpmailer 发送邮件方法,需要改成你自己的地址
  10. data: {
  11. exampleInputName: exampleInputName,
  12. exampleInputEmail1: exampleInputEmail1,
  13. exampleInputLink: exampleInputLink
  14. },
  15. dataType: "json",//回调函数接收数据的数据格式
  16. success: function (msg) {
  17. var data = '';
  18. if (msg !== '') {
  19. data = eval("(" + msg + ")");
  20. }
  21. if (data.su === 'success') {
  22. $('#result_msg').html("您的邮件已经发送成功!");
  23. } else {
  24. $('#result_msg').html("Sorry,服务器可能出了些问题。可以按照上面的方式联系哦!");
  25. }
  26. console.log(data);
  27. },
  28. error: function (msg) {
  29. console.log(msg);
  30. }
  31. });
  32. })
  33. }
  34. });
  35.  
  36. $(document).ready(function () {
  37. $("#signupForm").validate({
  38. rules: {
  39. exampleInputName: {
  40. required: true,
  41. minlength: 2
  42. },
  43. exampleInputEmail1: {
  44. required: true,
  45. email: true
  46. },
  47. exampleInputLink: {
  48. required: true,
  49. minlength: 2
  50. }
  51. },
  52. messages: {
  53. exampleInputName: {
  54. required: "请输入您的称呼",
  55. minlength: "您的称呼必须至少包含2个汉字"
  56. },
  57. exampleInputEmail1: "请输入有效的电子邮件地址",
  58. exampleInputLink: {
  59. required: "请输入您要告知的内容",
  60. },
  61. },
  62. errorElement: "em",
  63. errorPlacement: function (error, element) {
  64. error.addClass("text-danger");
  65.  
  66. if (element.prop("type") === "checkbox") {
  67. error.insertAfter(element.next("label"));
  68. } else {
  69. error.insertAfter(element);
  70. }
  71. }
  72. });
  73. });

阿里云服务器优惠网 http://www.helloaliyun.com

4)PHP发送邮件方法:

  1. <?php
  2. /**
  3. * @Author: yflad (em@yflad.cn)
  4. * @Blog: https://www.yflad.cn
  5. * @Date: 2019-04-02
  6. * @Role: 发送邮件方法
  7. */
  8.  
  9. use PHPMailer\PHPMailer\PHPMailer;
  10. use PHPMailer\PHPMailer\Exception;
  11. use PHPMailer\PHPMailer\SMTP;
  12.  
  13. require_once 'src/PHPMailer.php';
  14. require_once 'src/Exception.php';
  15. require_once 'src/SMTP.php';
  16.  
  17.  
  18. function sendMail($to, $title, $content)
  19. {
  20. $mail = new PHPMailer();
  21. //是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
  22. $mail->SMTPDebug = 0;
  23. //使用smtp鉴权方式发送邮件
  24. $mail->isSMTP();
  25. //smtp需要鉴权 这个必须是true
  26. $mail->SMTPAuth = true;
  27. //邮箱的服务器地址
  28. $mail->Host = 'smtp.mxhichina.com'; // 此处为阿里云企业。QQ:smtp.qq.com,网易:stmp.163.com
  29. //设置使用ssl加密方式登录鉴权
  30. $mail->SMTPSecure = 'ssl';
  31. //设置ssl连接smtp服务器的远程服务器端口号,默认是25,SSL填 465或587
  32. $mail->Port = 465;
  33. //设置发送的邮件的编码
  34. $mail->CharSet = 'UTF-8';
  35. //设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名
  36. $mail->FromName = '亦枫博客';
  37. //smtp登录的账号
  38. $mail->Username = 'XXX@mail.yflad.cn';
  39. //smtp登录的密码 QQ则使用生成的授权码(上文有提过)
  40. $mail->Password = 'XXXXX';
  41. //设置发件人邮箱地址 同登录的账号
  42. $mail->From = 'XXX@mail.yflad.cn';
  43. //邮件正文是否为html编码 true或false
  44. $mail->isHTML(true);
  45. //设置收件人邮箱地址,第一个参数为收件人邮箱地址,第二参数为给该地址设置的昵称,可以省略
  46. $mail->addAddress($to, '亦枫博客');
  47. //添加多个收件人 则多次调用方法即可
  48. // $mail->addAddress('XX@yflad.cn','亦枫');
  49. //添加该邮件的主题
  50. $mail->Subject = $title;
  51. //添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件
  52. $mail->Body = $content;
  53. //为该邮件添加附件。第一个参数为附件存放的目录(相对目录、或绝对目录均可),第二参数为在邮件附件中该附件的名称。简单的使用,不建议使用该函数
  54. // $mail->addAttachment('Update','Demo.jpg');
  55. //同样该方法可以多次调用 上传多个附件
  56. // $mail->addAttachment('../pic/Update','Demo2.png');
  57.  
  58. /*简单的判断一下*/
  59. $status = $mail->send();
  60. if ($status) {
  61. $su = "success";//给su赋值“success”;
  62. } else {
  63. $su = "";
  64. }
  65. $data = '{su:"' . $su . '"}';//只返回su变量值来判断是否发送成功,其它值不返回
  66. echo json_encode($data);
  67. }
  68.  
  69. /**
  70. * 这是是你要收件的邮箱,可以自定义邮箱模版。可以参考亦枫博客的 “评论回复邮件模版”
  71. * 不过也就自己看,没有多大需求
  72. */
  73. $to = 'XX@yflad.cn';
  74. $title = '老大,有一封来自介绍网站的邮件';
  75. $content = '发件人:' . $_POST['exampleInputName'] . '<br><br>发件人的邮件/电话:' . $_POST['exampleInputEmail1'] . '<br><br>内容:' . $_POST['exampleInputLink'];
  76.  
  77. sendMail($to, $title, $content);

 

界面效果展示和测试:

小结

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

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

文章来源:亦枫博客

本文标题:用PHPMailer在网站上实现“给我发送邮箱”功能和简单的表单验证 - 服务器教程_服务器技术_服务器知识_vps教程
本文地址:https://www.helloaliyun.com/tutorial/170.html

相关文章

  • CentOS 7 常用命令(系统关机、重启以及登出)

    关机:(系统的关机、重启以及登出 ) # 关闭系统(1)[root@localhost ~]# shutdown -h now # 关闭系统(2)[root@localhost ~]# init 0 # 关闭系统(3)[root@localhost ~]# telinit 0 # 按预定时间关闭系统[root@localhost...

    2019-12-07 服务器教程
  • linux重启命令 reboot与shutdown -r now的区别与联系

    在linux命令中reboot是重新启动,shutdown -r now是立即停止然后重新启动,都说他们两个是一样的,其实是有一定的区别的。shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告...

    2019-12-07 服务器教程
  • CentOS 7 如何使用命令重启或关机

    安装GNOME的朋友们首先切换到字符界面。切换到字符界面的方法如下: 先登陆进入系统,进入图形化界面,然后按Ctrl+Alt+F6(笔记本的是Ctrl+Alt+shift+Fn),进入字符界面。关机命令:shutdown或poweroffshutdown:shutdown -h now...

    2019-12-07 服务器教程
  • CentOS 7 正确关机重启的命令方法

    linux主要用于服务器领域,而在服务器上执行一项服务是永无止境的,除非遇到特殊情况,否则不会关机。和Windows不同,在linux系统下,很多进程是在后台执行的。在屏幕背后,可能有很多人同时在工作。如果直接按下电源的按钮,其他...

    2019-12-07 服务器教程
  • CentOS下的yum upgrade和yum update区别,没事别乱用!

    说明:生产环境对软件版本和内核版本要求非常精确,别没事有事随便的进行yum update操作!!!!!!!!!yum update: 升级所有包同时也升级软件和系统内核yum upgrade:只升级所有包,不升级软件和系统内核...

    2019-12-07 服务器教程
你可能感兴趣
热门浏览