JavaEE实现基于SMTP协议的邮件发送功能
程序员文章站
2023-11-05 17:14:10
本博客介绍基于ssm框架(spring4.0+springmvc+mybatis)组合的javamail应用,邮箱的话基于腾讯的qq邮箱,其实也是foxmail邮箱
先要...
本博客介绍基于ssm框架(spring4.0+springmvc+mybatis)组合的javamail应用,邮箱的话基于腾讯的qq邮箱,其实也是foxmail邮箱
先要了解一下smtp协议和ssl加密
smtp:称为简单邮件传输协议(simple mail transfer protocal),目标是向用户提供高效、可靠的邮件传输。smtp是一种请求响应的协议,也就是客户机向远程服务器发送请求,服务器响应,监听端口是25,所以其工作模式有两种:发送smtp,接收smtp
ssl加密:用来保障浏览器和网站服务器的安全性,其原理用译文解释就是:
当你的浏览器向服务器请求一个安全的网页(通常是 https://)
服务器就把它的证书和公匙发回来
浏览器检查证书是不是由可以信赖的机构颁发的,确认证书有效和此证书是此网站的。
使用公钥加密了一个随机对称密钥,包括加密的url一起发送到服务器
服务器用自己的私匙解密了你发送的钥匙。然后用这把对称加密的钥匙给你请求的url链接解密。
服务器用你发的对称钥匙给你请求的网页加密。你也有相同的钥匙就可以解密发回来的网页了
然后介绍怎么实现javamail发送邮件,先要下载
去充当服务器的qq邮箱开启smtp服务:
写个发送邮件的业务类:
package com.appms.email; import java.util.date; import java.util.properties; import javax.mail.address; import javax.mail.message; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.internetaddress; import javax.mail.internet.mimemessage; import com.sun.mail.util.mailsslsocketfactory; public class javaemailsender { public static void sendemail(string toemailaddress,string emailtitle,string emailcontent)throws exception{ properties props = new properties(); // 开启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加密的,所有需要开启才可以使用**/ mailsslsocketfactory sf = new mailsslsocketfactory(); sf.settrustallhosts(true); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.ssl.socketfactory", sf); //创建会话 session session = session.getinstance(props); //发送的消息,基于观察者模式进行设计的 message msg = new mimemessage(session); msg.setsubject(emailtitle); //使用stringbuilder,因为stringbuilder加载速度会比string快,而且线程安全性也不错 stringbuilder builder = new stringbuilder(); builder.append("\n"+emailcontent); builder.append("\n时间 " + new date()); msg.settext(builder.tostring()); msg.setfrom(new internetaddress("你的qq邮箱")); transport transport = session.gettransport(); transport.connect("smtp.qq.com", "你的qq邮箱", "你开启smtp服务申请的独立密码"); //发送消息 transport.sendmessage(msg, new address[] { new internetaddress(toemailaddress) }); transport.close(); } }
然后写个springmvc框架的controller类:
/** * 跳转到发送邮件页面 * @return * @throws exception */ @requestmapping("/gosendemail") public modelandview gosendemail(httpservletrequest request)throws exception{ modelandview mv = this.getmodelandview(); string email = request.getparameter("email"); if(email!=null&&!"".equals(email)){ email = email.trim(); mv.setviewname("member/send_email"); mv.addobject("email", email); } return mv; } /** * 发送邮件 * @return * @throws exception */ @requestmapping(value="/sendemail",produces="application/json;charset=utf-8") @responsebody public object sendemail(httpservletrequest request)throws exception{ map<string,string> map = new hashmap<string,string>(); string msg = "ok"; //发送状态 string toemail = request.getparameter("email"); //对方邮箱 string title = request.getparameter("title"); //标题 string content = request.getparameter("content"); //内容 javaemailsender.sendemail(toemail, title, content); map.put("result", msg); return map; }
这里用了jquery tip插件进行验证提示,所以需要引入相应的jquery文件
<script type="text/javascript" src="source/js/jquery-1.7.2.js"></script> <!--提示框--> <script type="text/javascript" src="source/js/jquery.tips.js"></script>
jquery表单验证和ajax异步请求:
<!-- 发送邮件 --> <script type="text/javascript"> //发送 function sendem(){ 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(); return false; } if($("#title").val()==""){ $("#title").tips({ side:3, msg:'请输入标题', bg:'#ae81ff', time:2 }); $("#title").focus(); return false; } if($("#content").val()==""){ $("#nr").tips({ side:1, msg:'请输入内容', bg:'#ae81ff', time:3 }); return false; } var email = $("#email").val(); var type = $("#type").val(); var title = $("#title").val(); var content = $("#content").val(); $("#zhongxin").hide(); $("#zhongxin2").show(); $.ajax({ type: "post", url: 'retroaction/sendemail.do?tm='+new date().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 }); } } }); } </script>
jsp页面的调用:
<!-- 编辑邮箱 --> <div> <table style="width:98%;" > <tr> <td style="margin-top:0px;"> <div style="float: left;" style="width:81%"><textarea name="email" id="email" rows="1" cols="50" style="width:600px;height:20px;" placeholder="请选输入对方邮箱,多个请用(;)分号隔开" title="请选输入对方邮箱,多个请用(;)分号隔开">${email}</textarea></div> <div style="float: right;" style="width:19%"><a class='btn btn-mini btn-info' title="编辑邮箱" onclick="dialog_open();">编辑邮箱</i></a></div> </td> </tr> <tr> <td> <input type="text" name="title" id="title" value="" placeholder="请选输入邮件标题" style="width:98%"/> </td> </tr> <tr> <td id="nr"> <script id="editor" type="text/plain" style="width:650px;height:259px;"></script> </td> </tr> <tr> <td style="text-align: center;"> <a class="btn btn-mini btn-primary" onclick="sendem();">发送</a> <a class="btn btn-mini btn-danger" onclick="top.dialog.close();">取消</a> </td> </tr> </table> </div> <div id="zhongxin2" class="center" style="display:none"><br/><img src="assets/images/jzx.gif" id='msg' /><br/><h4 class="lighter block green" id='msg'>正在发送...</h4></div>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。