Spring Boot中怎么整合邮件发送
本篇文章给大家分享的是有关Spring Boot中怎么整合邮件发送,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
什么是Spring Boot
Spring Boot是一个框架,其设计目的是简化Spring应用的初始搭建配置以及开发过程。该框架使用了特定的配置方式,从而使开发人员不在需要定义样板化的配置。
Spring Boot的好处
1、配置简单;
2、编码简单;
3、部署简单;
4、监控简单;
概述
Spring Boot下面整合了邮件服务器,使用Spring Boot能够轻松实现邮件发送;整理下最近使用Spring Boot发送邮件和注意事项;
Maven包依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
Spring Boot的配置
spring.mail.host=smtp.servie.com spring.mail.username=用户名//发送方的邮箱 spring.mail.password=密码//对于qq邮箱而言密码指的就是发送方的授权码 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=false#是否用启用加密传送的协议验证项 spring.mail.properties.mail.smtp.starttls.required=fasle#是否用启用加密传送的协议验证项 #注意:在spring.mail.password处的值是需要在邮箱设置里面生成的授权码,这个不是真实的密码。
Spring 代码实现
packagecom.dbgo.webservicedemo.email; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.core.io.FileSystemResource; importorg.springframework.mail.javamail.JavaMailSender; importorg.springframework.mail.javamail.MimeMessageHelper; importorg.springframework.stereotype.Component; importjavax.mail.MessagingException; importjavax.mail.internet.MimeMessage; importjava.io.File; @Component("emailtool") publicclassEmailTool{ @Autowired privateJavaMailSenderjavaMailSender; publicvoidsendSimpleMail(){ MimeMessagemessage=null; try{ message=javaMailSender.createMimeMessage(); MimeMessageHelperhelper=newMimeMessageHelper(message,true); helper.setFrom("jiajinhao@dbgo.cn"); helper.setTo("653484166@qq.com"); helper.setSubject("标题:发送Html内容"); StringBuffersb=newStringBuffer(); sb.append("<h2>大标题-h2</h2>") .append("<pstyle='color:#F00'>红色字</p>") .append("<pstyle='text-align:right'>右对齐</p>"); helper.setText(sb.toString(),true); FileSystemResourcefileSystemResource=newFileSystemResource(newFile("D:\76678.pdf")) helper.addAttachment("电子发票",fileSystemResource); javaMailSender.send(message); }catch(MessagingExceptione){ e.printStackTrace(); } } }
非Spring Boot下发送电子邮件:
Maven包依赖
<dependencies> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.5.2</version> </dependency> </dependencies>
DEMO1代码事例
packagecom.justin.framework.core.utils.email; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.UnsupportedEncodingException; importjava.util.Date; importjava.util.Properties; importjavax.activation.DataHandler; importjavax.activation.DataSource; importjavax.activation.FileDataSource; importjavax.mail.Address; importjavax.mail.Authenticator; importjavax.mail.Message; importjavax.mail.Message.RecipientType; importjavax.mail.MessagingException; importjavax.mail.PasswordAuthentication; importjavax.mail.Session; importjavax.mail.Transport; importjavax.mail.internet.InternetAddress; importjavax.mail.internet.MimeBodyPart; importjavax.mail.internet.MimeMessage; importjavax.mail.internet.MimeMultipart; importjavax.mail.internet.MimeUtility; /** *使用SMTP协议发送电子邮件 */ publicclasssendEmailCode{ //邮件发送协议 privatefinalstaticStringPROTOCOL="smtp"; //SMTP邮件服务器 privatefinalstaticStringHOST="mail.tdb.com"; //SMTP邮件服务器默认端口 privatefinalstaticStringPORT="25"; //是否要求身份认证 privatefinalstaticStringIS_AUTH="true"; //是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息) privatefinalstaticStringIS_ENABLED_DEBUG_MOD="true"; //发件人 privatestaticStringfrom="tdbjrcrm@tdb.com"; //收件人 privatestaticStringto="db_yangruirui@tdbcwgs.com"; privatestaticStringsenduserName="tdbjrcrm@tdb.com"; privatestaticStringsenduserPwd="New*2016"; //初始化连接邮件服务器的会话信息 privatestaticPropertiesprops=null; static{ props=newProperties(); props.setProperty("mail.enable","true"); props.setProperty("mail.transport.protocol",PROTOCOL); props.setProperty("mail.smtp.host",HOST); props.setProperty("mail.smtp.port",PORT); props.setProperty("mail.smtp.auth",IS_AUTH);//视情况而定 props.setProperty("mail.debug",IS_ENABLED_DEBUG_MOD); } /** *发送简单的文本邮件 */ publicstaticbooleansendTextEmail(Stringto,intcode)throwsException{ try{ //创建Session实例对象 Sessionsession1=Session.getDefaultInstance(props); //创建MimeMessage实例对象 MimeMessagemessage=newMimeMessage(session1); //设置发件人 message.setFrom(newInternetAddress(from)); //设置邮件主题 message.setSubject("内燃机注册验证码"); //设置收件人 message.setRecipient(RecipientType.TO,newInternetAddress(to)); //设置发送时间 message.setSentDate(newDate()); //设置纯文本内容为邮件正文 message.setText("您的验证码是:"+code+"!验证码有效期是10分钟,过期后请重新获取!" +"中国内燃机学会"); //保存并生成最终的邮件内容 message.saveChanges(); //获得Transport实例对象 Transporttransport=session1.getTransport(); //打开连接 transport.connect("meijiajiang2016",""); //将message对象传递给transport对象,将邮件发送出去 transport.sendMessage(message,message.getAllRecipients()); //关闭连接 transport.close(); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } publicstaticvoidmain(String[]args)throwsException{ sendHtmlEmail("db_yangruirui@tdbcwgs.com",88888); } /** *发送简单的html邮件 */ publicstaticbooleansendHtmlEmail(Stringto,intcode)throwsException{ //创建Session实例对象 Sessionsession1=Session.getInstance(props,newMyAuthenticator()); //创建MimeMessage实例对象 MimeMessagemessage=newMimeMessage(session1); //设置邮件主题 message.setSubject("内燃机注册"); //设置发送人 message.setFrom(newInternetAddress(from)); //设置发送时间 message.setSentDate(newDate()); //设置收件人 message.setRecipients(RecipientType.TO,InternetAddress.parse(to)); //设置html内容为邮件正文,指定MIME类型为text/html类型,并指定字符编码为gbk message.setContent("<divstyle='width:600px;margin:0auto'><h4style='color:#003E64;text-align:center;'>内燃机注册验证码</h4><pstyle=''>尊敬的用户您好:</p><pstyle='text-indent:2em'>您在注册内燃机账号,此次的验证码是:"+code+",有效期10分钟!如果过期请重新获取。</p><pstyle='text-align:right;color:#003E64;font-size:20px;'>中国内燃机学会</p></div>","text/html;charset=utf-8"); //设置自定义发件人昵称 Stringnick=""; try{ nick=javax.mail.internet.MimeUtility.encodeText("中国内燃机学会"); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } message.setFrom(newInternetAddress(nick+"<"+from+">")); //保存并生成最终的邮件内容 message.saveChanges(); //发送邮件 try{ Transport.send(message); returntrue; }catch(Exceptione){ e.printStackTrace(); returnfalse; } } /** *发送带内嵌图片的HTML邮件 */ publicstaticvoidsendHtmlWithInnerImageEmail()throwsMessagingException{ //创建Session实例对象 Sessionsession=Session.getDefaultInstance(props,newMyAuthenticator()); //创建邮件内容 MimeMessagemessage=newMimeMessage(session); //邮件主题,并指定编码格式 message.setSubject("带内嵌图片的HTML邮件","utf-8"); //发件人 message.setFrom(newInternetAddress(from)); //收件人 message.setRecipients(RecipientType.TO,InternetAddress.parse(to)); //抄送 message.setRecipient(RecipientType.CC,newInternetAddress("java_test@sohu.com")); //密送(不会在邮件收件人名单中显示出来) message.setRecipient(RecipientType.BCC,newInternetAddress("417067629@qq.com")); //发送时间 message.setSentDate(newDate()); //创建一个MIME子类型为“related”的MimeMultipart对象 MimeMultipartmp=newMimeMultipart("related"); //创建一个表示正文的MimeBodyPart对象,并将它加入到前面创建的MimeMultipart对象中 MimeBodyParthtmlPart=newMimeBodyPart(); mp.addBodyPart(htmlPart); //创建一个表示图片资源的MimeBodyPart对象,将将它加入到前面创建的MimeMultipart对象中 MimeBodyPartimagePart=newMimeBodyPart(); mp.addBodyPart(imagePart); //将MimeMultipart对象设置为整个邮件的内容 message.setContent(mp); //设置内嵌图片邮件体 DataSourceds=newFileDataSource(newFile("resource/firefoxlogo.png")); DataHandlerdh=newDataHandler(ds); imagePart.setDataHandler(dh); imagePart.setContentID("firefoxlogo.png");//设置内容编号,用于其它邮件体引用 //创建一个MIME子类型为"alternative"的MimeMultipart对象,并作为前面创建的htmlPart对象的邮件内容 MimeMultiparthtmlMultipart=newMimeMultipart("alternative"); //创建一个表示html正文的MimeBodyPart对象 MimeBodyParthtmlBodypart=newMimeBodyPart(); //其中cid=androidlogo.gif是引用邮件内部的图片,即imagePart.setContentID("androidlogo.gif");方法所保存的图片 htmlBodypart.setContent("<spanstyle='color:red;'>这是带内嵌图片的HTML邮件哦!!!<imgsrc=\"cid:firefoxlogo.png\"/></span>","text/html;charset=utf-8"); htmlMultipart.addBodyPart(htmlBodypart); htmlPart.setContent(htmlMultipart); //保存并生成最终的邮件内容 message.saveChanges(); //发送邮件 Transport.send(message); } /** *发送带内嵌图片、附件、多收件人(显示邮箱姓名)、邮件优先级、阅读回执的完整的HTML邮件 */ publicstaticvoidsendMultipleEmail()throwsException{ Stringcharset="utf-8";//指定中文编码格式 //创建Session实例对象 Sessionsession=Session.getInstance(props,newMyAuthenticator()); //创建MimeMessage实例对象 MimeMessagemessage=newMimeMessage(session); //设置主题 message.setSubject("使用JavaMail发送混合组合类型的邮件测试"); //设置发送人 message.setFrom(newInternetAddress(from,"新浪测试邮箱",charset)); //设置收件人 message.setRecipients(RecipientType.TO, newAddress[]{ //参数1:邮箱地址,参数2:姓名(在客户端收件只显示姓名,而不显示邮件地址),参数3:姓名中文字符串编码 newInternetAddress("java_test@sohu.com","张三_sohu",charset), newInternetAddress("xyang0917@163.com","李四_163",charset), } ); //设置抄送 message.setRecipient(RecipientType.CC,newInternetAddress("xyang0917@gmail.com","王五_gmail",charset)); //设置密送 message.setRecipient(RecipientType.BCC,newInternetAddress("xyang0917@qq.com","赵六_QQ",charset)); //设置发送时间 message.setSentDate(newDate()); //设置回复人(收件人回复此邮件时,默认收件人) message.setReplyTo(InternetAddress.parse("\""+MimeUtility.encodeText("田七")+"\"<417067629@qq.com>")); //设置优先级(1:紧急3:普通5:低) message.setHeader("X-Priority","1"); //要求阅读回执(收件人阅读邮件时会提示回复发件人,表明邮件已收到,并已阅读) message.setHeader("Disposition-Notification-To",from); //创建一个MIME子类型为"mixed"的MimeMultipart对象,表示这是一封混合组合类型的邮件 MimeMultipartmailContent=newMimeMultipart("mixed"); message.setContent(mailContent); //附件 MimeBodyPartattach2=newMimeBodyPart(); MimeBodyPartattach3=newMimeBodyPart(); //内容 MimeBodyPartmailBody=newMimeBodyPart(); //将附件和内容添加到邮件当中 mailContent.addBodyPart(attach2); mailContent.addBodyPart(attach3); mailContent.addBodyPart(mailBody); //附件1(利用jaf框架读取数据源生成邮件体) DataSourceds1=newFileDataSource("resource/Earth.bmp"); DataHandlerdh2=newDataHandler(ds1); attach2.setFileName(MimeUtility.encodeText("Earth.bmp")); attach2.setDataHandler(dh2); //附件2 DataSourceds2=newFileDataSource("resource/如何学好C语言.txt"); DataHandlerdh3=newDataHandler(ds2); attach3.setDataHandler(dh3); attach3.setFileName(MimeUtility.encodeText("如何学好C语言.txt")); //邮件正文(内嵌图片+html文本) MimeMultipartbody=newMimeMultipart("related");//邮件正文也是一个组合体,需要指明组合关系 mailBody.setContent(body); //邮件正文由html和图片构成 MimeBodyPartimgPart=newMimeBodyPart(); MimeBodyParthtmlPart=newMimeBodyPart(); body.addBodyPart(imgPart); body.addBodyPart(htmlPart); //正文图片 DataSourceds3=newFileDataSource("resource/firefoxlogo.png"); DataHandlerdh4=newDataHandler(ds3); imgPart.setDataHandler(dh4); imgPart.setContentID("firefoxlogo.png"); //html邮件内容 MimeMultiparthtmlMultipart=newMimeMultipart("alternative"); htmlPart.setContent(htmlMultipart); MimeBodyParthtmlContent=newMimeBodyPart(); htmlContent.setContent( "<spanstyle='color:red'>这是我自己用javamail发送的邮件哦!"+ "<imgsrc='cid:firefoxlogo.png'/></span>" ,"text/html;charset=gbk"); htmlMultipart.addBodyPart(htmlContent); //保存邮件内容修改 message.saveChanges(); /*Fileeml=buildEmlFile(message); sendMailForEml(eml);*/ //发送邮件 Transport.send(message); } /** *将邮件内容生成eml文件 *@parammessage邮件内容 */ publicstaticFilebuildEmlFile(Messagemessage)throwsMessagingException,FileNotFoundException,IOException{ Filefile=newFile("c:\\"+MimeUtility.decodeText(message.getSubject())+".eml"); message.writeTo(newFileOutputStream(file)); returnfile; } /** *发送本地已经生成好的email文件 */ publicstaticvoidsendMailForEml(Fileeml)throwsException{ //获得邮件会话 Sessionsession=Session.getInstance(props,newMyAuthenticator()); //获得邮件内容,即发生前生成的eml文件 InputStreamis=newFileInputStream(eml); MimeMessagemessage=newMimeMessage(session,is); //发送邮件 Transport.send(message); } /** *向邮件服务器提交认证信息 */ staticclassMyAuthenticatorextendsAuthenticator{ privateStringusername=""; privateStringpassword=""; publicMyAuthenticator(){ super(); this.password=senduserPwd; this.username=senduserName; } publicMyAuthenticator(Stringusername,Stringpassword){ super(); this.username=username; this.password=password; } @Override protectedPasswordAuthenticationgetPasswordAuthentication(){ returnnewPasswordAuthentication(username,password); } } }
DEMO2代码事例:
packagecom.justin.framework.core.utils.email; importjava.util.HashSet; importjava.util.Properties; importjava.util.Set; importjavax.activation.DataHandler; importjavax.activation.FileDataSource; importjavax.mail.Address; importjavax.mail.BodyPart; importjavax.mail.Message; importjavax.mail.Multipart; importjavax.mail.Session; importjavax.mail.Transport; importjavax.mail.internet.InternetAddress; importjavax.mail.internet.MimeBodyPart; importjavax.mail.internet.MimeMessage; importjavax.mail.internet.MimeMultipart; importjavax.mail.internet.MimeUtility; publicclassMailManagerUtils{ //发送邮件 publicstaticbooleansendMail(Emailemail){ Stringsubject=email.getSubject(); Stringcontent=email.getContent(); String[]recievers=email.getRecievers(); String[]copyto=email.getCopyto(); Stringattbody=email.getAttbody(); String[]attbodys=email.getAttbodys(); if(recievers==null||recievers.length<=0){ returnfalse; } try{ Propertiesprops=newProperties(); props.setProperty("mail.enable","true"); props.setProperty("mail.protocal","smtp"); props.setProperty("mail.smtp.auth","true"); props.setProperty("mail.user","tdbjrcrm@tdb.com"); props.setProperty("mail.pass","New***"); props.setProperty("mail.smtp.host","mail.tdb.com"); props.setProperty("mail.smtp.from","tdbjrcrm@tdb.com"); props.setProperty("mail.smtp.fromname","tdbVC"); //创建一个程序与邮件服务器的通信 SessionmailConnection=Session.getInstance(props,null); Messagemsg=newMimeMessage(mailConnection); //设置发送人和接受人 Addresssender=newInternetAddress(props.getProperty("mail.smtp.from")); //多个接收人 msg.setFrom(sender); Set<InternetAddress>toUserSet=newHashSet<InternetAddress>(); //邮箱有效性较验 for(inti=0;i<recievers.length;i++){ if(recievers[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")){ toUserSet.add(newInternetAddress(recievers[i].trim())); } } msg.setRecipients(Message.RecipientType.TO,toUserSet.toArray(newInternetAddress[0])); //设置抄送 if(copyto!=null){ Set<InternetAddress>copyToUserSet=newHashSet<InternetAddress>(); //邮箱有效性较验 for(inti=0;i<copyto.length;i++){ if(copyto[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")){ copyToUserSet.add(newInternetAddress(copyto[i].trim())); } } //msg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto)); msg.setRecipients(Message.RecipientType.CC,copyToUserSet.toArray(newInternetAddress[0])); } //设置邮件主题 msg.setSubject(MimeUtility.encodeText(subject,"UTF-8","B"));//中文乱码问题 //设置邮件内容 BodyPartmessageBodyPart=newMimeBodyPart(); messageBodyPart.setContent(content,"text/html;charset=UTF-8");//中文 Multipartmultipart=newMimeMultipart(); multipart.addBodyPart(messageBodyPart); msg.setContent(multipart); /**********************发送附件************************/ if(attbody!=null){ String[]filePath=attbody.split(";"); for(Stringfilepath:filePath){ //设置信件的附件(用本地机上的文件作为附件) BodyPartmdp=newMimeBodyPart(); FileDataSourcefds=newFileDataSource(filepath); DataHandlerdh=newDataHandler(fds); mdp.setFileName(MimeUtility.encodeText(fds.getName())); mdp.setDataHandler(dh); multipart.addBodyPart(mdp); } //把mtp作为消息对象的内容 msg.setContent(multipart); }; if(attbodys!=null){ for(Stringfilepath:attbodys){ //设置信件的附件(用本地机上的文件作为附件) BodyPartmdp=newMimeBodyPart(); FileDataSourcefds=newFileDataSource(filepath); DataHandlerdh=newDataHandler(fds); mdp.setFileName(MimeUtility.encodeText(fds.getName())); mdp.setDataHandler(dh); multipart.addBodyPart(mdp); } //把mtp作为消息对象的内容 msg.setContent(multipart); } ; /**********************发送附件结束************************/ //先进行存储邮件 msg.saveChanges(); System.out.println("正在发送邮件...."); Transporttrans=mailConnection.getTransport(props.getProperty("mail.protocal")); //邮件服务器名,用户名,密码 trans.connect(props.getProperty("mail.smtp.host"),props.getProperty("mail.user"),props.getProperty("mail.pass")); trans.sendMessage(msg,msg.getAllRecipients()); System.out.println("发送邮件成功!"); //关闭通道 if(trans.isConnected()){ trans.close(); } returntrue; }catch(Exceptione){ System.err.println("邮件发送失败!"+e); returnfalse; }finally{ } } //发信人,收信人,回执人邮件中有中文处理乱码,res为获取的地址 //http默认的编码方式为ISO8859_1 //对含有中文的发送地址,使用MimeUtility.decodeTex方法 //对其他则把地址从ISO8859_1编码转换成gbk编码 publicstaticStringgetChineseFrom(Stringres){ Stringfrom=res; try{ if(from.startsWith("=?GB")||from.startsWith("=?gb")||from.startsWith("=?UTF")){ from=MimeUtility.decodeText(from); }else{ from=newString(from.getBytes("ISO8859_1"),"GBK"); } }catch(Exceptione){ e.printStackTrace(); } returnfrom; } //转换为GBK编码 publicstaticStringtoChinese(Stringstrvalue){ try{ if(strvalue==null) returnnull; else{ strvalue=newString(strvalue.getBytes("ISO8859_1"),"GBK"); returnstrvalue; } }catch(Exceptione){ returnnull; } } publicstaticvoidmain(String[]args){ Emailemail=newEmail(); email.setRecievers(newString[]{"db_yangruirui@tdbcwgs.com"}); email.setSubject("TEST测件"); email.setContent("TEST测试"); sendMail(email); } }
以上就是Spring Boot中怎么整合邮件发送,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注恰卡编程网行业资讯频道。
推荐阅读
-
springboot实现基于aop的切面日志
本文实例为大家分享了springboot实现基于aop的切面日志的具体代码,供大家参考,具体内容如下通过aop的切面方式实现日志...
-
SpringBoot定时任务功能怎么实现
-
SpringBoot中的@Import注解怎么使用
-
SpringBoot整合Lombok及常见问题怎么解决
-
springboot图片验证码功能模块怎么实现
-
Springboot+SpringSecurity怎么实现图片验证码登录
-
SpringBoot注解的知识点有哪些
SpringBoot注解的知识点有哪些这篇“SpringBoot注...
-
SpringBoot2.x中management.security.enabled=false无效怎么解决
-
springboot怎么禁用某项健康检查
springboot怎么禁用某项健康检查今天小编给大家分享一下sp...
-
SpringBoot2怎么自定义端点