天天看点

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