JavaMail與Spring內建開發
spring架構內建JavaMail的主要包
<a href="https://s5.51cto.com/wyfs02/M02/07/01/wKiom1nCAtrgYnbOAACOw8NSxuI820.png" target="_blank"></a>
2.mail.properties
<code>mail.smtp.host=smtp.</code><code>163</code><code>.com</code>
<code>mail.smtp.auth=</code><code>true</code>
<code>mail.username=</code><code>15511111111</code>
<code>mail.password=</code><code>123</code>
<code>mail.from=</code><code>15511111111</code><code>@163</code><code>.com</code>
3.使用spring配置(applicationContext-mail.xml)
<code><?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"UTF-8"</code><code>?></code>
<code><beans xmlns=</code><code>"http://www.springframework.org/schema/beans"</code>
<code> </code><code>xmlns:xsi=</code><code>"http://www.w3.org/2001/XMLSchema-instance"</code>
<code> </code><code>xmlns:p=</code><code>"http://www.springframework.org/schema/p"</code>
<code> </code><code>xmlns:context=</code><code>"http://www.springframework.org/schema/context"</code>
<code> </code><code>xmlns:tx=</code><code>"http://www.springframework.org/schema/tx"</code>
<code> </code><code>xmlns:aop=</code><code>"http://www.springframework.org/schema/aop"</code>
<code> </code><code>xsi:schemaLocation="http:</code><code>//www.springframework.org/schema/beans </code>
<code> </code><code>http:</code><code>//www.springframework.org/schema/beans/spring-beans.xsd </code>
<code> </code><code>http:</code><code>//www.springframework.org/schema/aop </code>
<code> </code><code>http:</code><code>//www.springframework.org/schema/aop/spring-aop.xsd </code>
<code> </code><code>http:</code><code>//www.springframework.org/schema/tx </code>
<code> </code><code>http:</code><code>//www.springframework.org/schema/tx/spring-tx.xsd </code>
<code> </code><code>http:</code><code>//www.springframework.org/schema/context </code>
<code> </code><code>http:</code><code>//www.springframework.org/schema/context/spring-context.xsd"></code>
<code> </code>
<code> </code><code><description>JavaMail配置檔案</description></code>
<code> </code><code><!-- 加載mail.properties檔案 --></code>
<code> </code><code><context:property-placeholder location=</code><code>"classpath:mail.properties"</code><code>/></code>
<code> </code><code><!-- 配置一個簡單郵件對象 --></code>
<code> </code><code><bean id=</code><code>"mailMessage"</code> <code>class</code><code>=</code><code>"org.springframework.mail.SimpleMailMessage"</code><code>></code>
<code> </code><code><property name=</code><code>"from"</code> <code>value=</code><code>"${mail.from}"</code><code>></property></code>
<code> </code><code></bean></code>
<code> </code><code><!-- 郵件的發送對象 --></code>
<code> </code><code><bean id=</code><code>"mailSender"</code> <code>class</code><code>=</code><code>"org.springframework.mail.javamail.JavaMailSenderImpl"</code><code>></code>
<code> </code><code><property name=</code><code>"host"</code> <code>value=</code><code>"${mail.smtp.host}"</code><code>></property></code>
<code> </code><code><property name=</code><code>"username"</code> <code>value=</code><code>"${mail.username}"</code><code>></property></code>
<code> </code><code><property name=</code><code>"password"</code> <code>value=</code><code>"${mail.password}"</code><code>></property></code>
<code> </code><code><property name=</code><code>"defaultEncoding"</code> <code>value=</code><code>"UTF-8"</code><code>></property></code>
<code> </code><code><!-- 郵件發送相關的配置資訊 --></code>
<code> </code><code><property name=</code><code>"javaMailProperties"</code> <code>></code>
<code> </code><code><props></code>
<code> </code><code><prop key=</code><code>"mail.smtp.auth"</code><code>>${mail.smtp.auth}</prop></code>
<code> </code><code><prop key=</code><code>"mail.debug"</code><code>></code><code>true</code><code></prop></code>
<code> </code><code><prop key=</code><code>"mail.smtp.timeout"</code><code>></code><code>0</code><code></prop></code>
<code> </code><code></props></code>
<code> </code><code></property></code>
<code></beans></code>
4.發送簡單郵件代碼
<code>public</code> <code>void</code> <code>testJavaMail() </code><code>throws</code> <code>Exception{</code>
<code> </code><code>ApplicationContext ac = </code><code>new</code> <code>ClassPathXmlApplicationContext(</code><code>"classpath:applicationContext-mail.xml"</code><code>);</code>
<code> </code>
<code> </code><code>SimpleMailMessage message = (SimpleMailMessage) ac.getBean(</code><code>"mailMessage"</code><code>);</code><code>//加載簡單郵件對象</code>
<code> </code><code>JavaMailSender sender = (JavaMailSender) ac.getBean(</code><code>"mailSender"</code><code>); </code><code>//得到郵件的發送對象,專門用于郵件發送</code>
<code> </code><code>//設定簡單郵件對象的屬性</code>
<code> </code><code>message.setSubject(</code><code>"spring與javamail的測試"</code><code>);</code><code>//主題</code>
<code> </code><code>message.setText(</code><code>"hello,spring and javamail "</code><code>);</code><code>//内容</code>
<code> </code><code>message.setTo(</code><code>"[email protected]"</code><code>);</code><code>//收件箱</code>
<code> </code><code>//發送郵件</code>
<code> </code><code>sender.send(message);</code>
<code>}</code>
5.發送帶有圖檔和帶附件的郵件
<code>//發送一個允許帶圖檔,同時帶附件的郵件</code>
<code> </code><code>MimeMessage message = sender.createMimeMessage();</code><code>//建立一封允許帶圖檔,同時帶附件的郵件對象</code>
<code> </code><code>//為了更好的操作MimeMessage對象,借用一個工具類來操作它</code>
<code> </code><code>MimeMessageHelper helper = </code><code>new</code> <code>MimeMessageHelper(message, </code><code>true</code><code>);</code>
<code> </code><code>//通過工具類設定主題,内容,圖檔,附件</code>
<code> </code><code>helper.setFrom(</code><code>"[email protected]"</code><code>);</code>
<code> </code><code>helper.setTo(</code><code>"[email protected]"</code><code>);</code>
<code> </code><code>helper.setSubject(</code><code>"這是來自x網的一個請求"</code><code>);</code>
<code> </code><code>helper.setText(</code><code>"<html><head></head><body><h1>hello!!baby </h1>"</code>
<code> </code><code>+</code><code>"<a href=http://www.baidu.com>去百度</a>"</code> <code>+ </code><code>"<img src=cid:image/></body></html>"</code><code>,</code><code>true</code><code>);//第二個參數說明内容要解析為html代碼</code>
<code> </code><code>//添加圖檔</code>
<code> </code><code>FileSystemResource resource = </code><code>new</code> <code>FileSystemResource(</code><code>new</code> <code>File(</code><code>"E:\\原理分析.png"</code><code>));</code>
<code> </code><code>helper.addInline(</code><code>"image"</code><code>, resource);</code>
<code> </code><code>/*JavaMailSenderImpl mailSender = (JavaMailSenderImpl) ac.getBean("mailSender");</code>
<code> </code><code>//3.建立一封允許帶附件的郵件對象</code>
<code> </code><code>MimeMessage mimeMessage = mailSender.createMimeMessage();//建立出允許帶附件的郵件對象</code>
<code> </code><code>//4.建立出一個用于操作MimeMessage的幫助類的對象</code>
<code> </code><code>MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);</code>
<code> </code><code>//5.設定郵件的相關内容 (發送者,拼接者,主題,内容 )</code>
<code> </code><code>helper.setFrom("[email protected]");</code>
<code> </code><code>helper.setTo("[email protected]");</code>
<code> </code><code>helper.setSubject("帶圖檔和附件的郵件測試");</code>
<code> </code><code>helper.setText("<html><head></head><body><h1>hello!!spring image html mail</h1>"</code>
<code> </code><code>+"<a href=http://www.itheima.com>去百度</a>" + "<img src=cid:image/></body></html>", true);//cid:是固定的,後面的image是自己定義的</code>
<code> </code><code>//指定image所在的位置(是指本地電腦)</code>
<code> </code><code>FileSystemResource img = new FileSystemResource(new File("E:/原理分析.png"));//将本地的圖檔轉化成一個圖檔資源 </code>
<code> </code><code>helper.addInline("image", img);//image的參數來自上面cid的取值</code>
<code> </code><code>//發送時帶附件</code>
<code> </code><code>FileSystemResource zipResource = new FileSystemResource(new File("E:/javamail1_4_4.zip"));</code>
<code> </code><code>helper.addAttachment("javamail1_4_4.zip", zipResource);*/</code>
<code> </code><code>//發送郵件</code>
<code> </code><code>//mailSender.send(mimeMessage);</code>
項目中使用spring中的JavaMail工具類
01.需要在類中注入相關對象
<code>private</code> <code>SimpleMailMessage mailMessage;</code>
<code>private</code> <code>JavaMailSender mailSender;</code>
<code>public</code> <code>void</code> <code>setMailMessage(SimpleMailMessage mailMessage) {</code>
<code> </code><code>this</code><code>.mailMessage = mailMessage;</code>
<code>public</code> <code>void</code> <code>setMailSender(JavaMailSender mailSender) {</code>
<code> </code><code>this</code><code>.mailSender = mailSender;</code>
02.在spring配置檔案中配置
<code><bean id=</code><code>"userService"</code> <code>class</code><code>=</code><code>"com.my.qb.service.impl.UserServiceImpl"</code><code>></code>
<code> </code><code><property name=</code><code>"baseDao"</code> <code>ref=</code><code>"baseDao"</code><code>></property></code>
<code> </code><code><property name=</code><code>"mailMessage"</code> <code>ref=</code><code>"mailMessage"</code><code>></property></code>
<code> </code><code><property name=</code><code>"mailSender"</code> <code>ref=</code><code>"mailSender"</code><code>></property></code>
03.實作功能(比如:在注冊的時候,發送郵件,郵件可能發送不成功,但要保證注冊完成)
<code>/**</code>
<code>* 新增使用者</code>
<code>*/</code>
<code>public</code> <code>void</code> <code>saveOrUpdate(</code><code>final</code> <code>User entity) {</code>
<code> </code><code>if</code><code>(UtilFuns.isEmpty(entity.getId())){</code>
<code> </code><code>//新增</code>
<code> </code><code>String id = UUID.randomUUID().toString();</code>
<code> </code><code>entity.setId(id);</code>
<code> </code><code>entity.getUserinfo().setId(id);</code>
<code> </code>
<code> </code><code>//補充Shiro添加後的bug</code>
<code> </code><code>entity.setPassword(Encrypt.md5(SysConstant.DEFAULT_PASS, entity.getUserName()));</code>
<code> </code><code>baseDao.saveOrUpdate(entity);</code><code>//記錄儲存</code>
<code> </code><code>//獨立的比較費時的,都交給線程來做</code>
<code> </code><code>//spring內建javaMail</code>
<code> </code><code>Thread th = </code><code>new</code> <code>Thread(</code><code>new</code> <code>Runnable() {</code>
<code> </code><code>public</code> <code>void</code> <code>run() {</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>mailMessage.setTo(entity.getUserinfo().getEmail());</code>
<code> </code><code>mailMessage.setSubject(</code><code>"新員工入職的系統賬戶通知"</code><code>);</code>
<code> </code><code>mailMessage.setText(</code><code>"歡迎您加入本集團,您的使用者名:"</code><code>+entity.getUserName()+</code><code>",初始密碼:"</code><code>+SysConstant.DEFAULT_PASS);</code>
<code> </code>
<code> </code><code>mailSender.send(mailMessage);</code>
<code> </code><code>} </code><code>catch</code> <code>(Exception e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>});</code>
<code> </code><code>th.start();</code>
<code> </code><code>}</code><code>else</code><code>{</code>
<code> </code><code>//修改</code>
<code> </code><code>baseDao.saveOrUpdate(entity);</code>
<code> </code><code>}</code>
本文轉自 叫我北北 51CTO部落格,原文連結:http://blog.51cto.com/qinbin/1967128