Spring mvc +ajax 发送邮件
1.前端页面--form表单提交,通过发送按钮的id=“send”定位DOM,触发ajax请求
- <form class="form-horizontal" id="emailEdit" style="display: none;margin: 40px;">
- <%--收件人--%>
- <div class="form-group">
- <label for="emailer" class="col-sm-2 control-label" >收件人</label>
- <div class="col-sm-10" style="width: 82%" >
- <textarea class="form-control" rows="3" name="emailer" id="emailer" placeholder="多个收件人,请以,隔开"></textarea>
- </div>
- </div>
- <%--邮件标题--%>
- <div class="form-group" >
- <label for="taskName" class="col-sm-2 control-label">邮件标题</label>
- <div class="col-sm-10" style="width: 82%" >
- <input type="text" class="form-control" name="emailTitle" id="emailTitle" placeholder="邮件标题">
- </div>
- </div>
- <%--正文--%>
- <div class="form-group" >
- <label for="accdescription" class="col-sm-2 control-label">正文</label>
- <div class="col-sm-10" style="width: 82%" >
- <textarea class="form-control" rows="10" name="emailContent" id="emailContent" placeholder="邮件正文"></textarea>
- </div>
- </div>
- <div class="form-group" style="float: right;margin-right: 40px;margin-top: 30px">
- <div class="col-sm-offset-2 col-sm-10" >
- <button type="button" class="btn btn-success" id="send" style="background-color: #FF8C00" >发送</button>
- </div>
- </div>
- </form>
2.ajax请求
formCheckClean清除校验格式的函数
checkparam() 校验输入非空,以及邮箱格式是否正确的函数
通过发送按钮的id--send的点击事件,触发ajax请求
- var index11;
- function formCheckClean(){
- $('.text-danger').remove();//首先清除提示的标签
- $("*").removeClass('has-error');//清除has-error错误样式
- }//校验样式清除函数
- //邮箱非空校验及格式校验函数
- function checkparam(){
- var flag=true;
- var emailer=$("#emailer").val();
- var emailTitle=$("#emailTitle").val();
- if(emailer == null || emailer == ""){
- $("#emailer").parent().parent().addClass('form-group has-error');
- $("#emailer").parent().after('<label class="control-label text-danger" style="display:block;float: right;color: red"><i class="fa fa-times-circle-o"></i> 必填项不能为空!</label>');
- flag=false;
- }else{
- reg = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
- var strList=emailer.split(",");
- var errorcount =0;
- var errormail ="";
- for(i=0;i<strList.length;i++){
- if(!reg.test(strList[i])){
- errormail=errormail+strList[i]+';';
- errorcount++;
- }
- }
- if(errorcount >=1){
- // console.log("不符合要求的邮箱个数:"+errorcount);
- $("#emailer").parent().parent().addClass('form-group has-error');
- $("#emailer").parent().after('<label class="control-label text-danger" style="display:block;float: right;color: red"><i class="fa fa-times-circle-o"></i>'+'错误邮箱:'+errormail+'</label>');
- flag=false;
- }
- }
- if(emailTitle == null || emailTitle == ""){
- $("#emailTitle").parent().parent().addClass('form-group has-error');
- $("#emailTitle").parent().after('<label class="control-label text-danger" style="display:block;float: right;color: red"><i class="fa fa-times-circle-o"></i> 必填项不能为空!</label>');
- flag=false;
- }
- return flag;
- }
- //发送邮件函数
- $("button#send").unbind("click").click(function(){
- formCheckClean();
- var flag=checkparam();
- var reg=new RegExp("\n","g"); //创建正则RegExp对象
- eContent=$("#emailContent").val().replace(reg,"<br/>");
- if(flag == true){
- document.getElementById("send").innerHTML = "发送中...";
- // $("#send").text("发送中...");
- $.ajax({
- type : "post",
- url : "/accident/SendEditEmail.do",
- dataType:"json",
- data: {"emailer":$("#emailer").val(),"emailTitle":$("#emailTitle").val(),"emailContent":eContent},
- async : false,
- success:function (data){
- document.getElementById("send").innerHTML = "发送";
- if(data= "ture"){
- layer.alert("发送成功!", {icon: 6,skin: 'layui-layer-lan',});
- layer.close(index11)//关闭弹层
- $("#functontestform").find('input[type=text],select,input[type=date],textarea').each(function() {
- $(this).val('');
- });//清空form表单并查询
- $('#functionTestSelectTable').bootstrapTable('refresh');
- }else {
- layer.msg("发送失败,请稍后重试", {icon: 5,skin: 'layui-layer-lan',});
- }
- }//success end
- });//ajax end
- }
- });
3.在controller中写发邮件的逻辑,获取前端ajax请求传来的参数,调用SendMail类中的sendMail函数,并传参
- /**
- * 发送邮件编辑
- *
- * @param response
- * @return
- * @throws Exception
- * @param: request
- */
- @RequestMapping(value = "/SendEditEmail.do")
- @ResponseBody
- public String SendEditEmail(@Valid @ModelAttribute("accident") Accident accident, BindingResult br,
- Model model, HttpServletRequest req, HttpServletResponse response) throws Exception {
- response.setContentType("text/html;charset=utf-8");
- req.setCharacterEncoding("utf-8");
- //收件人
- String emailer = req.getParameter("emailer").trim();
- //邮件标题
- String emailTitle = req.getParameter("emailTitle").trim();
- //邮件内容
- String emailContent = req.getParameter("emailContent").trim();
- //处理文件内容使用
- ArrayList<String> list = new ArrayList<>();
- System.out.println(emailContent);
- //发送邮件
- String status="false";
- if(emailer != "" && emailTitle != "" && emailContent != "")
- {
- List emailerList = new ArrayList();//不能使用string类型的类型,这样只能发送一个收件人
- String []median=emailer.split(",");//对输入的多个邮件进行逗号分割
- for(int i=0;i<median.length;i++){
- emailerList.add(new InternetAddress(median[i]));
- }
- InternetAddress[] address =(InternetAddress[])emailerList.toArray(new InternetAddress[emailerList.size()]);
- // System.out.println("收件人所在数组-----"+address);
- for(int i=0;i<address.length;i++){
- status=SendMail.sendMail(address[i],emailTitle,emailContent);
- }
- }
- return status;
- }
4.在这之前需要配置邮箱信息 ------global.properties
- #设置邮箱服务器
mailHost=smtp.163.com- #设置邮箱端口号
- mailPort=25
- #设置邮箱服务器的用户名
- mailUsername=aaaa@163.com
- #授权码(注意不是邮箱登录密码)
- mailPassword=BMT856
- #设置超时时间
- mailTimeout=25000
- #设置发件人
- mailFrom=aaaa@163.com
5.开发获取配置文件的工具类
- package luckyweb.seagull.util;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Properties;
- /**
- * @author lw
- * @createTime 2018/6/25 15:27
- * @description 获取配置文件类
- */
- public class ProUtil {
- private static final String PROPERTIES_DEFAULT = "global.properties";
- public static String host;
- public static Integer port;
- public static String userName;
- public static String passWord;
- public static String emailForm;
- public static String timeout;
- public static String personal;
- public static Properties properties;/**
- * 初始化
- */
- private static void init() {
- properties = new Properties();
- try {
- InputStream inputStream = ProUtil.class.getClassLoader().getResourceAsStream(PROPERTIES_DEFAULT);
- properties.load(inputStream);
- inputStream.close();
- //properties.setProperty("mailFrom","cuizhixiang@feitu.biz");
- host = properties.getProperty("mailHost");
- port = Integer.parseInt(properties.getProperty("mailPort"));
- userName = properties.getProperty("mailUsername");
- passWord = properties.getProperty("mailPassword");
- emailForm = properties.getProperty("mailFrom");
- timeout = properties.getProperty("mailTimeout");
- personal = "测试部";//发件人的别名
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
6.开发发送邮件的实现类
- package luckyweb.seagull.util;
- import org.springframework.mail.javamail.JavaMailSenderImpl;
- import org.springframework.mail.javamail.MimeMessageHelper;
- import javax.mail.MessagingException;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeMessage;
- import java.io.UnsupportedEncodingException;
- import java.util.Properties;
- /**
- * @author lw
- * @createTime 2018/6/25 15:24
- * @description 服务端邮件类
- */
- public class SendMail {
- private static final String HOST = ProUtil.host;
- private static final Integer PORT = ProUtil.port;
- private static final String USERNAME = ProUtil.userName;
- private static final String PASSWORD = ProUtil.passWord;
- private static final String emailForm = ProUtil.emailForm;
- private static final String timeout = ProUtil.timeout;
- private static final String personal = ProUtil.personal;
- private static JavaMailSenderImpl mailSender = createMailSender();
- private SendMail(){}
- /**
- * 邮件发送器
- *
- * @return 配置信息工具
- */
- private static JavaMailSenderImpl createMailSender() {
- JavaMailSenderImpl sender = new JavaMailSenderImpl();
- sender.setHost(HOST);
- sender.setPort(PORT);
- sender.setUsername(USERNAME);
- sender.setPassword(PASSWORD);
- sender.setDefaultEncoding("Utf-8");
- Properties p = new Properties();
- p.setProperty("mail.smtp.timeout", timeout);
- p.setProperty("mail.smtp.auth", "true");
- sender.setJavaMailProperties(p);
- return sender;
- }
- /**
- * 发送邮件
- *
- * @param to 接受人
- * @param subject 主题
- * @param html 发送内容
- * @throws :MessagingException 异常
- * @throws :UnsupportedEncodingException 异常
- */
- public static String sendMail(InternetAddress to, String subject, String html) throws MessagingException,UnsupportedEncodingException {
- MimeMessage mimeMessage = mailSender.createMimeMessage();
- // 设置utf-8或UTF-8编码,否则邮件会有乱码
- MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
- messageHelper.setFrom(emailForm, personal);
- messageHelper.setTo(to);
- messageHelper.setSubject(subject);
- messageHelper.setText(html, true);
- mailSender.send(mimeMessage);
- return "true" ;
- }
- public static void main(String[] args) {
- String ss = "项目名称: 合肥通 事故状态: 跟踪处理完成 事故等级: 五级及以下事故 发生时间: 2018-06-11 13:52:42 事故原因类型: 紧急上线-未测试 事故描述: 线上事故 事故原因分析: 事故原因分析 受影响范围: 受影响范围 纠正处理过程: 纠正处理过程" +
- "(需点名责任人) 解决时间: 2018-06-11 13:53:25 事故汇报人: 张美丽";
- for (int i = 0; i < ss.length(); i++) {
- if(ss.equals(":"))
- break;
- String new_ss =ss.replace(" ","<br>");
- System.out.print(new_ss);
- }
- /* String subject = "html邮件测试"; // subject javamail自动转码
- StringBuffer theMessage = new StringBuffer();
- theMessage.append("<h2><font color=red>加油</font></h2>");
- theMessage.append("<hr>");
- theMessage.append("<i>美丽的开始</i>");
- theMessage.append("<table border='1'><tr><td>aaa</td><td>bbb</td></tr><tr><td>ccc</td><td>ddd</td></tr></table>");
- try {
- SendMail.sendMail("357712148@qq.com",subject,theMessage.toString());
- } catch (MessagingException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- System.out.println("运行结果!!");*/
- }
- }
到此大功告成,支持发送多人,用,隔开。
Spring mvc +ajax 发送邮件的更多相关文章
- spring mvc ajax 提交复杂数组类型
The server refused this request because the request entity is in a format not supported by the reque ...
- spring mvc ajax异步文件的上传和普通文件上传
表单提交方式文件上传和ajax异步文件上传 一:首先是我在spring mvc下的表单提交方式上传 ssm的包配置我就不一一详细列出来了,但是上传的包我还是列出来 这一段我也不知道怎么给大家讲解就是直 ...
- Spring MVC+ajax进行信息验证
本文是一个ajax结合Spring MVC使用的入门,首先我们来了解一下什么是Ajax AJAX 不是新的编程语言,而是一种使用现有标准的新方法.AJAX 最大的优点是在不重新加载整个页面的情况下,可 ...
- spring mvc ajax请求
jar包中增加 jackson-annotations-2.5.0.jar jackson-core-2.5.0.jar jackson-databind-2.5.0.jar springmvx.xm ...
- Spring MVC ajax:post/get 的具体实现
Post 方式 1.自动注入 a. pom.xml ---- 配置Maven,添加必要的jar包 <!--用于 String-JSONObject 转换 --> <dependenc ...
- spring mvc ajax 400解决
The request sent by the client was syntactically incorrect. ajax发起请求时报400错误.请求代码如下: var reportId=($( ...
- spring mvc ajax返回值乱码
加入如下配置: <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHan ...
- spring mvc+ajax分页
分页大致思路:页面每次把当前页传到后台并获得从后台传过来的json数据,解析后布局到这个页面上. 1.服务端代码: @Controller public class MemcachedContrlle ...
- spring mvc ajax
<%@ page contentType="text/html;charset=UTF-8" %> <%@ include file="/WEB-INF ...
随机推荐
- 关于创建Django表单Forms继承BaseForm的问题
在创建Django表单时,因为需要验证用户输入的验证码是否正确,因此需要在session里提取当前验证码的值和POST提交过来的值进行比对,如图: form.py from django import ...
- js 数组中如何删除字典
区别: []表示是一个数组,如var strs = ['a','b','c'].{}表示是一个对象,比如,var obj = {name: '宙斯',sex: 1} 如何在数组中删除指定对象呢?? [ ...
- jQuery模拟键盘打字逐字逐句显示文本
jQuery模拟键盘打字逐字逐句显示文本 html代码 <!doctype html> <html lang="zh"> <head> < ...
- 定时器 间隔调用setInterval
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用jQuery快速高效制作网页交互特效---jQuery选择器
一.什么是jQuery选择器 Query选择器继承了CSS与Path语言的部分语法,允许通过标签名.属性名或内容对DOM元素进行快速.准确的选择, 而不必担心浏览器的兼容性,通过jQuery选择器对页 ...
- 23 | MySQL是怎么保证数据不丢的?
今天这篇文章,我会继续和你介绍在业务高峰期临时提升性能的方法.从文章标题“MySQL是怎么保证数据不丢的?”,你就可以看出来,今天我和你介绍的方法,跟数据的可靠性有关. 在专栏前面文章和答疑篇中,我都 ...
- MongoDB 分片键分类与数据分发
In sharded clusters, if you do not use the _id field as the shard key, then your application must en ...
- learning scala for comprehensions
code: package com.aura.scala.day01 object forComprehensions { def main(args: Array[String]): Unit = ...
- 关于 requestAnimationFrame 小结
一.小谈 requestAnimationFrame: 说起 requestAnimationFrame,我们先看幅图: 相当一部分的浏览器的显示频率是16.7ms, 就是上图第一行的节奏,表现就是“ ...
- Bzoj 1566: [NOI2009]管道取珠(DP)
1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MB Submit: 1558 Solved: 890 [Submit][Status ...