手机版

用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教程
本文地址:http://www.helloaliyun.com/tutorial/170.html

相关文章

  • Linux Shell 教程_Linux Shell 中文详解参考手册
    Linux Shell 教程_Linux Shell 中文详解参考手册

    Shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。Shell脚本就是由Shell命令组成的文件,这些命令都是可执行程序的名字,脚本不用编译即可运行,它通过解释器解释运行。...

    2019-09-01 服务器教程
  • Shell 教程:Shell是什么?一分钟理解Shell的概念!
    Shell 教程:Shell是什么?一分钟理解Shell的概念!

    现在我们使用的操作系统(Windows、Mac OS、Android、iOS 等)都是带图形界面的,简单直观,容易上手,对专业用户(程序员、网管等)和普通用户(家庭主妇、老年人等)都非常适用;计算机的普及离不开图形界面。 然而在计算机的早期并没...

    2019-09-01 服务器教程
  • Shell 教程:Shell 文件包含

    和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。Shell 文件包含的语法格式如下:. filename # 注意点号(.)和文件名中间有一空格或source filename实例创建两个 sh...

    2019-09-01 服务器教程
  • Shell 教程:Shell 输入/输出重定向

    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是...

    2019-09-01 服务器教程
  • Shell 教程:Shell 函数

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。shell中函数的定义格式如下:[ function ] funname [()]{ action; [return int;]}说明: 1、可以带function fun() 定义,也可以直接fun() 定义,不带任...

    2019-09-01 服务器教程
  • Shell 教程:Shell的流程控制

    和Java、PHP等语言不一样,Shell的流程控制不可为空,如(以下为PHP流程控制写法):<?phpif (isset($_GET["q"])) { search(q);}else { // 不做任何事情}在sh/bash里可不能这么写,如果else分支没有语句执行,就不要写这个...

    2019-09-01 服务器教程
  • Shell 教程:Shell test 命令

    Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等...

    2019-09-01 服务器教程
  • Shell 教程:Shell printf 命令

    printf 命令模仿 C 程序库(library)里的 printf() 程序。printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制...

    2019-09-01 服务器教程
  • Shell 教程:Shell echo命令

    Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:echo string您可以使用echo实现更复杂的输出格式控制。1.显示普通字符串:echo "It is a test"这里的双引号完全可以省略,以下命令与上面实例...

    2019-09-01 服务器教程
  • Shell 教程:Shell 基本运算符

    Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表...

    2019-09-01 服务器教程
你可能感兴趣