配色: 字号:
SSM框架+Javamail发送邮件
2016-12-27 | 阅:  转:  |  分享 
  




${email}

编辑邮箱

























发送

取消





SSM框架+Javamail发送邮件



本博客介绍基于SSM框架(Spring4.0+SpringMVC+Mybatis)组合的Javamail应用,邮箱的话基于腾讯的QQ邮箱,其实也是Foxmail邮箱



先要了解一下SMTP协议和SSL加密

SMTP:称为简单邮件传输协议(SimpleMailTransferProtocal),目标是向用户提供高效、可靠的邮件传输。SMTP是一种请求响应的协议,也就是客户机向远程服务器发送请求,服务器响应,监听端口是25,所以其工作模式有两种:发送SMTP,接收SMTP



SSL加密:用来保障浏览器和网站服务器的安全性,其原理用译文解释就是:

当你的浏览器向服务器请求一个安全的网页(通常是https://)



服务器就把它的证书和公匙发回来



浏览器检查证书是不是由可以信赖的机构颁发的,确认证书有效和此证书是此网站的。



使用公钥加密了一个随机对称密钥,包括加密的URL一起发送到服务器



服务器用自己的私匙解密了你发送的钥匙。然后用这把对称加密的钥匙给你请求的URL链接解密。



服务器用你发的对称钥匙给你请求的网页加密。你也有相同的钥匙就可以解密发回来的网页了



然后介绍怎么实现javamail发送邮件,先要下载javamail的jar:http://download.csdn.net/detail/u014427391/9721520



去充当服务器的QQ邮箱开启SMTP服务:

这里写图片描述



写个发送邮件的业务类:



packagecom.appms.email;



importjava.util.Date;

importjava.util.Properties;



importjavax.mail.Address;

importjavax.mail.Message;

importjavax.mail.Session;

importjavax.mail.Transport;

importjavax.mail.internet.InternetAddress;

importjavax.mail.internet.MimeMessage;



importcom.sun.mail.util.MailSSLSocketFactory;



publicclassJavaEmailSender{





publicstaticvoidsendEmail(StringtoEmailAddress,StringemailTitle,StringemailContent)throwsException{

Propertiesprops=newProperties();



//开启debug调试

props.setProperty("mail.debug","true");

//发送服务器需要身份验证

props.setProperty("mail.smtp.auth","true");

//设置邮件服务器主机名

props.setProperty("mail.host","smtp.qq.com");

//发送邮件协议名称

props.setProperty("mail.transport.protocol","smtp");



/SSL认证,注意腾讯邮箱是基于SSL加密的,所有需要开启才可以使用/

MailSSLSocketFactorysf=newMailSSLSocketFactory();

sf.setTrustAllHosts(true);

props.put("mail.smtp.ssl.enable","true");

props.put("mail.smtp.ssl.socketFactory",sf);



//创建会话

Sessionsession=Session.getInstance(props);



//发送的消息,基于观察者模式进行设计的

Messagemsg=newMimeMessage(session);

msg.setSubject(emailTitle);

//使用StringBuilder,因为StringBuilder加载速度会比String快,而且线程安全性也不错

StringBuilderbuilder=newStringBuilder();

builder.append("\n"+emailContent);

builder.append("\n时间"+newDate());

msg.setText(builder.toString());

msg.setFrom(newInternetAddress("你的QQ邮箱"));



Transporttransport=session.getTransport();

transport.connect("smtp.qq.com","你的QQ邮箱","你开启SMTP服务申请的独立密码");

//发送消息

transport.sendMessage(msg,newAddress[]{newInternetAddress(toEmailAddress)});

transport.close();

}

}



然后写个SpringMVC框架的Controller类:





/

跳转到发送邮件页面

@return

@throwsException

/

@RequestMapping("/goSendEmail")

publicModelAndViewgoSendEmail(HttpServletRequestrequest)throwsException{

ModelAndViewmv=this.getModelAndView();

Stringemail=request.getParameter("email");

if(email!=null&&!"".equals(email)){

email=email.trim();

mv.setViewName("member/send_email");

mv.addObject("email",email);

}

returnmv;

}



/

发送邮件

@return

@throwsException

/

@RequestMapping(value="/sendEmail",produces="application/json;charset=UTF-8")

@ResponseBody

publicObjectsendEmail(HttpServletRequestrequest)throwsException{

Mapmap=newHashMap();

Stringmsg="ok";//发送状态

StringtoEMAIL=request.getParameter("EMAIL");//对方邮箱

StringTITLE=request.getPawww.tt951.comrameter("TITLE");//标题

StringCONTENT=request.getParameter("CONTENT");//内容

JavaEmailSender.sendEmail(toEMAIL,TITLE,CONTENT);

map.put("result",msg);

returnmap;

}



这里用了jQueryTIP插件进行验证提示,所以需要引入相应的Jquery文件











Jquery表单验证和Ajax异步请求:







//发送

functionsendEm(){



if($("#TYPE").val()=="1"){

$("#CONTENT").val(getContentTxt());

}else{

$("#CONTENT").val(getContent());

}

if($("#EMAIL").val()==""){

$("#EMAIL").tips({

side:3,

msg:''请输入邮箱'',

bg:''#AE81FF'',

time:2

});

$("#EMAIL").focus();

returnfalse;

}

if($("#TITLE").val()==""){

$("#TITLE").tips({

side:3,

msg:''请输入标题'',

bg:''#AE81FF'',

time:2

});

$("#TITLE").focus();

returnfalse;

}

if($("#CONTENT").val()==""){



$("#nr").tips({

side:1,

msg:''请输入内容'',

bg:''#AE81FF'',

time:3

});

returnfalse;

}



varEMAIL=$("#EMAIL").val();

varTYPE=$("#TYPE").val();

varTITLE=$("#TITLE").val();

varCONTENT=$("#CONTENT").val();



$("#zhongxin").hide();

$("#zhongxin2").show();



$.ajax({

type:"POST",

url:''retroaction/sendEmail.do?tm=''+newDate().getTime(),

data:{EMAIL:EMAIL,TITLE:TITLE,CONTENT:CONTENT},

dataType:''json'',

//beforeSend:validateData,

cache:false,

success:function(data){

if("ok"==data.result){

$("#msg").tips({

side:3,

msg:''发送成功!'',

bg:''#68B500'',

time:5

});

setTimeout("showdiv()",1000);

}else{

$("#msg").tips({

side:3,

msg:''发送失败!'',

bg:''#68B500'',

time:5

});

}



}

});



}







JSP页面的调用:



















正在发送...

献花(0)
+1
(本文系thedust79首藏)
类似文章 更多
发表评论: