天天看點

Spring與JavaMail

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>&lt;?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"UTF-8"</code><code>?&gt;</code>

<code>&lt;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"&gt;</code>

<code>    </code> 

<code>    </code><code>&lt;description&gt;JavaMail配置檔案&lt;/description&gt;</code>

<code>    </code><code>&lt;!-- 加載mail.properties檔案 --&gt;</code>

<code>    </code><code>&lt;context:property-placeholder location=</code><code>"classpath:mail.properties"</code><code>/&gt;</code>

<code>    </code><code>&lt;!-- 配置一個簡單郵件對象 --&gt;</code>

<code>    </code><code>&lt;bean id=</code><code>"mailMessage"</code> <code>class</code><code>=</code><code>"org.springframework.mail.SimpleMailMessage"</code><code>&gt;</code>

<code>       </code><code>&lt;property name=</code><code>"from"</code> <code>value=</code><code>"${mail.from}"</code><code>&gt;&lt;/property&gt;</code>

<code>    </code><code>&lt;/bean&gt;</code>

<code>    </code><code>&lt;!-- 郵件的發送對象 --&gt;</code>

<code>    </code><code>&lt;bean id=</code><code>"mailSender"</code> <code>class</code><code>=</code><code>"org.springframework.mail.javamail.JavaMailSenderImpl"</code><code>&gt;</code>

<code>         </code><code>&lt;property name=</code><code>"host"</code> <code>value=</code><code>"${mail.smtp.host}"</code><code>&gt;&lt;/property&gt;</code>

<code>         </code><code>&lt;property name=</code><code>"username"</code> <code>value=</code><code>"${mail.username}"</code><code>&gt;&lt;/property&gt;</code>

<code>         </code><code>&lt;property name=</code><code>"password"</code> <code>value=</code><code>"${mail.password}"</code><code>&gt;&lt;/property&gt;</code>

<code>         </code><code>&lt;property name=</code><code>"defaultEncoding"</code> <code>value=</code><code>"UTF-8"</code><code>&gt;&lt;/property&gt;</code>

<code>         </code><code>&lt;!-- 郵件發送相關的配置資訊 --&gt;</code>

<code>         </code><code>&lt;property name=</code><code>"javaMailProperties"</code> <code>&gt;</code>

<code>            </code><code>&lt;props&gt;</code>

<code>                  </code><code>&lt;prop key=</code><code>"mail.smtp.auth"</code><code>&gt;${mail.smtp.auth}&lt;/prop&gt;</code>

<code>                  </code><code>&lt;prop key=</code><code>"mail.debug"</code><code>&gt;</code><code>true</code><code>&lt;/prop&gt;</code>

<code>                  </code><code>&lt;prop key=</code><code>"mail.smtp.timeout"</code><code>&gt;</code><code>0</code><code>&lt;/prop&gt;</code>

<code>            </code><code>&lt;/props&gt;</code>

<code>         </code><code>&lt;/property&gt;</code>

<code>&lt;/beans&gt;</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>"&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;hello!!baby &lt;/h1&gt;"</code>

<code>                    </code><code>+</code><code>"&lt;a href=http://www.baidu.com&gt;去百度&lt;/a&gt;"</code>    <code>+ </code><code>"&lt;img src=cid:image/&gt;&lt;/body&gt;&lt;/html&gt;"</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("&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;hello!!spring image html mail&lt;/h1&gt;"</code>

<code>                       </code><code>+"&lt;a href=http://www.itheima.com&gt;去百度&lt;/a&gt;"    + "&lt;img src=cid:image/&gt;&lt;/body&gt;&lt;/html&gt;", 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>&lt;bean id=</code><code>"userService"</code> <code>class</code><code>=</code><code>"com.my.qb.service.impl.UserServiceImpl"</code><code>&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"baseDao"</code> <code>ref=</code><code>"baseDao"</code><code>&gt;&lt;/property&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"mailMessage"</code> <code>ref=</code><code>"mailMessage"</code><code>&gt;&lt;/property&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"mailSender"</code> <code>ref=</code><code>"mailSender"</code><code>&gt;&lt;/property&gt;</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