使用spring实现邮件的发送(含测试,源码,注释)

      此篇主要讲的是使用spring配置实现邮件发送,与之前的底层实现简便了不少,只需要几个配置就可以了,那么请往下看:

   先写个接口

 /**  
* @Title: IMailserdService.java
* @Package org.service
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-30 上午10:36:34
* @version V1.0  
*/
package org.service;/**   *    * 项目名称:spring_Schop8   * 类名称:IMailserdService   * 类描述:   * 创建人:Mu Xiongxiong  * 创建时间:2017-5-30 上午10:36:34   * 修改人:Mu Xiongxiong   * 修改时间:2017-5-30 上午10:36:34   * 修改备注:   * @version    *    */
public interface IMailsendService {/*** * @Title: sendMessage* @Description: 该方法的主要作用:发送邮件* @param   设定文件  * @return  返回类型:void   * @throws*/void sendMessage();
}

然后在写个实现该接口的类:

 /**  
* @Title: AttMailsendServiceImpl.java
* @Package org.service.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-30 上午11:12:02
* @version V1.0  
*/
package org.service.impl;import java.io.IOException;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;import org.service.IMailsendService;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;/**   *    * 项目名称:spring_Schop8   * 类名称:AttMailsendServiceImpl   * 类描述:   使用spring实现对邮件的发送* 创建人:Mu Xiongxiong  * 创建时间:2017-5-30 上午11:12:02   * 修改人:Mu Xiongxiong   * 修改时间:2017-5-30 上午11:12:02   * 修改备注:   * @version    *    */
public class AttMailsendServiceImpl implements IMailsendService {private JavaMailSender javaMailSender;/**(非 Javadoc)* <p>Title: sendMessage</p>* <p>Description(描述):发送带附件的邮件 </p>* @see org.service.IMailsendService#sendMessage()*/@Overridepublic void sendMessage() {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper;try {helper = new MimeMessageHelper(message,true,"utf-8");helper.setFrom("jerry@mail.com");helper.setTo("tina@mail.com");helper.setSubject("带附件的邮件");//普通格式的//helper.setText("发送一个附件内容!<a href='http://www.baidu.com'>百度搜索</a>");//html格式的helper.setText("发送一个附件内容!<a href='http://www.baidu.com'>百度搜索</a>",true);//添加附件1ClassPathResource file1 = new ClassPathResource("/org/doc/doc.txt");helper.addAttachment(file1.getFilename(),file1.getFile());//添加附件2ClassPathResource file2 = new ClassPathResource("/org/doc/text.txt");helper.addAttachment(file2.getFilename(), file2.getFile());javaMailSender.send(message);} catch (MessagingException e) {// TODO 异常执行块!e.printStackTrace();} catch (IOException e) {// TODO 异常执行块!e.printStackTrace();}}public JavaMailSender getJavaMailSender() {return javaMailSender;}public void setJavaMailSender(JavaMailSender javaMailSender) {this.javaMailSender = javaMailSender;}}

上面的这个类还可以发送带附件的邮件,里面含两个附件(文件),我弄上来吧:


还有一种是使用模板发送带html格式的邮件:

我直接上实现类:

 /**  
* @Title: CreateMatterServiceImpl.java
* @Package org.service.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-30 上午11:46:53
* @version V1.0  
*/
package org.service.impl;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;import org.service.IMailsendService;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;/**   *    * 项目名称:spring_Schop8   * 类名称:CreateMatterServiceImpl   * 类描述:   * 创建人:Mu Xiongxiong  * 创建时间:2017-5-30 上午11:46:53   * 修改人:Mu Xiongxiong   * 修改时间:2017-5-30 上午11:46:53   * 修改备注:   * @version    *    */
public class CreateMatterServiceImpl implements IMailsendService {private JavaMailSender javaMailSender;private Configuration configuration;/**(非 Javadoc)* <p>Title: sendMessage</p>* <p>Description(描述):使用后模板发送邮件 </p>* @see org.service.IMailsendService#sendMessage()*/@Overridepublic void sendMessage() {MimeMessage message = javaMailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message,true,"UTF-8");helper.setFrom("jerry@mail.com");helper.setTo("tina@mail.com");helper.setSubject("使用模板进行发送邮件");helper.setText(getText(),true);//从模板里面读取javaMailSender.send(message);} catch (MessagingException e) {// TODO 异常执行块!e.printStackTrace();}}//读取模板private String getText(){String txt = "";try {Template template  = configuration.getTemplate("mail.ftl");//通过map传递动态数据Map map = new HashMap();map.put("username","雄雄");//解析模板文件txt = FreeMarkerTemplateUtils.processTemplateIntoString(template,map);} catch (IOException e) {// TODO 异常执行块!e.printStackTrace();} catch (TemplateException e) {// TODO 异常执行块!e.printStackTrace();}return txt;}public JavaMailSender getJavaMailSender() {return javaMailSender;}public void setJavaMailSender(JavaMailSender javaMailSender) {this.javaMailSender = javaMailSender;}public Configuration getConfiguration() {return configuration;}public void setConfiguration(Configuration configuration) {this.configuration = configuration;}}

模板文件如下:


然后在看看spring里面是怎么配置的呢?

<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><bean id="mailsender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="host" value="mail.com"></property><property name="port" value="25"></property><property name="username"  value="jerry"></property><property name="password"  value="123" ></property><property name="protocol"  value="smtp"></property><property name="defaultEncoding" value="utf-8"></property><property name="javaMailProperties"><props><prop key="mail.smtp.auth">true</prop></props></property></bean><!-- 配置FreeMarker--><bean id="freeMarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean"><!-- 指定模板文件路径 --><property name="templateLoaderPath" value="org/doc/"></property><!-- 设置freekMarker环境变量 --><property name="freemarkerSettings"><props><prop key="default_encoding">UTF-8</prop></props></property></bean><!-- 简单邮件 --><bean id="simpleMailsendService" class="org.service.impl.SimpleMailsendServiceImpl"><property name="sender" ref="mailsender"></property></bean><!-- html和带附件的邮件 --><bean id="AttMailsendService" class="org.service.impl.AttMailsendServiceImpl"><property name="javaMailSender" ref="mailsender"></property></bean><!-- 使用模板发送邮件--><bean id="createMatterService" class="org.service.impl.CreateMatterServiceImpl"><property name="configuration" ref="freeMarkerConfiguration"></property><property name="javaMailSender" ref="mailsender"></property></bean></beans>

当前时间已经是00点多了,又累又困,我就不详细解释这个applicationContexct.xml里面的内容了,里面有注释,看不懂的可以评论,我第一时间改进!

接着我们测试一下:

TestMail:

package org.test;import org.junit.Test;
import org.service.IMailsendService;
import org.service.impl.Mail;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestMail {@Testpublic void testMail() {ApplicationContext ctx = new  ClassPathXmlApplicationContext("applicationContext.xml"); //简单邮件//IMailsendService mailsendService=(IMailsendService) ctx.getBean("simpleMailsendService");//复杂邮件//IMailsendService mailsendService=(IMailsendService) ctx.getBean("AttMailsendService");//使用模板的文件IMailsendService mailsendService=(IMailsendService) ctx.getBean("createMatterService");mailsendService.sendMessage();System.out.println("发送成功!");}}

注明一下:简单邮件是直接发的文本内容,复杂邮件是包含html格式和附件的,模板发送是html格式的另一种方式,

我们来看看运行的结果:

先看看带附件,还有html格式的邮件:


接下来是简单邮件:


接下来的一种是使用模板发送邮件,用户名是动态上去的:



看不懂的欢迎留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你当前无权访问该文件夹 解决你当前无权访问该文件夹拒绝你访问该文件夹

我 这样就完成了 http://www.xitonghe.com/jiaocheng/windows7-5642.html https://jingyan.baidu.com/article/4b52d702aa01b3fc5c774b1b.html Win10正式版提示你当前无权访问该文件夹怎么办 https://jingyan.baidu.com/article/4b52d702aa01b3fc5c774b1b.html 1407345人看了…

SpringBoot+Vue博客系统---后端接口开发

Java后端接口开发 从零开始搭建一个项目骨架&#xff0c;最好选择合适&#xff0c;熟悉的技术&#xff0c;并且在未来易拓展&#xff0c;适合微服务化体系等。所以一般以Springboot作为我们的框架基础&#xff0c;这是离不开的了。 然后数据层&#xff0c;我们常用的是Mybati…

图说世界编程语言排行

TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标&#xff0c;每月更新&#xff0c;这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎&#xff08;诸如Google、MSN、Yahoo!、Wikipedia、YouTube以及Baidu等&#xff09;进行计算…

中国有超级计算机的大学,计算机专业排名看超算实力,ASC竞赛五大高校排名,中山大学第一...

ASC竞赛五大高校计算机专业的实力主要体现在算法与编程的逻辑运算上&#xff0c;因此计算机专业必须掌握大量基础数学知识&#xff0c;甚至很多是离散数学、模糊数学等人工智能逻辑数学&#xff0c;简单的程序软件应用和O2O程序实现其实都不是计算机专业实力的体现&#xff0c;…

IntelliJ IDEA设置JDK版本

IntelliJ IDEA设置JDK版本 临渊行 2019-06-13 13:59:13 46888 收藏 30 分类专栏&#xff1a; 这里有个坑 版权 一、背景 即使我电脑安装的JDK版本是8&#xff0c;然而在idea运行中常常提示xxjdk1.5已过时之类的&#xff0c;why?明明是我装的JDK8啊 二、解决 鼠标点击f…

从抵触到力推,.Net Core的成功让微软正视开源

微软在两年前做了一件当时非常令人惊讶的事情&#xff1a;将 .Net Core 开源。在此之前&#xff0c;微软曾表示开源是对软件经济的威胁。或许是为了更好的销售工具和云服务&#xff0c;亦或许是为了吸引更多的开发者到其平台&#xff0c;微软开始开源。到目前为止&#xff0c;这…

线程池的原理及实现

转载自 线程池的原理及实现 1、线程池简介&#xff1a; 多线程技术主要解决处理器单元内多个线程执行的问题&#xff0c;它可以显著减少处理器单元的闲置时间&#xff0c;增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为&#xff1a;T1 创建线…

计算机考试行高怎么设置,Excel隔行调整行高的四种有效方法

领导要求把一份Excel表格的偶数行行高调整一下。这份表格可是有上百行的&#xff0c;逐一调整行高显然是不科学的。几经周折&#xff0c;费了我N多的口舌四处讨教&#xff0c;这个任务还是顺利地完成了。一、直接定位法先在表格的最后增加一个辅助列。在该列的第一行的单元格中…

亲身体验Intellij Idea从卡顿到顺畅

亲身体验Intellij Idea从卡顿到顺畅 idea power save mode 指尖飘落的程序 2018-01-16 14:12:12 11991 收藏 1 分类专栏&#xff1a; 工具 版权 power save mode 开启后代码不提示&#xff0c; 省电模式&#xff08;经典模式&#xff1a;适用低配版电脑&#xff09; htt…

在收购 Sun 的六年后,Oracle 终于瞄准了 Java 的非付费用户

你还在认为 Java 是免费的吗&#xff1f;再想想&#xff01;&#xff08;2017年你会欠我们很多钱&#xff09; 在收购了 Sun 公司的六年后&#xff0c;Oracle 正在大规模的加大对违反其许可证的 Java 客户的审查力度。 越来越多的 Oracle 客户和合作伙伴被拉里埃里森的团队约谈…

mysql卸载再安装作死级尝试(测试前记得备份数据库)

安装之前一定要将自己的mysql清理干净 1、下载后得到zip压缩包. 2、解压到自己想要安装到的目录&#xff0c;本人解压到的是D:\Environment\mysql-5.7.19 3、添加环境变量&#xff1a;我的电脑->属性->高级->环境变量 选择PATH,在其后面添加: 你的mysql 安装文件下…

按逆向思维定义软件测试,软件测试基础相关概念

测试基础知识是2008-9-20笔记整理&#xff0c;大部份内容来自软件评测师教程&#xff0c;年限已久&#xff0c;有些笔记已丢失。一&#xff0c;理清测试相关概念1&#xff0c;质量 &#xff1a; 实体特性的总和&#xff0c;满足明确或隐含要求的能力2&#xff0c;软件质量 &…

‘entityManagerFactory‘ that could not be found

springboot结合spring data jpa出现a bean named entityManagerFactory that could not be found 羿 2018-10-28 23:46:30 9064 收藏 1 Consider defining a bean named ‘entityManagerFactory’ in your configuration出现的解决方法 原文&#xff1a;https://blog.csdn.…

分享我的第一个asp.net core开发过程

.net core 这个东西感觉还是很不错的&#xff0c;学习了一下&#xff0c;并且做了一个微服务(IP地址查询服务) http://vju.cc/ip/ipquery 看上他的跨平台功能&#xff0c;所以就研究一下&#xff0c;中间有不少坑&#xff0c;有很多第三方类库还不支持.net core&#xff0c;就连…

Java并发编程:深入剖析ThreadLocal

转载自 Java并发编程&#xff1a;深入剖析ThreadLocal 一.对ThreadLocal的理解 ThreadLocal&#xff0c;很多地方叫做线程本地变量&#xff0c;也有些地方叫做线程本地存储&#xff0c;其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本&…

【spring boot】启动类启动 错误: 找不到或无法加载主类 com.codingapi.tm.TxManagerApplication 的解决方案

【spring boot】启动类启动 错误: 找不到或无法加载主类 com.codingapi.tm.TxManagerApplication 的解决方案 导入的一个外部的spring boot项目&#xff0c;运行启动类&#xff0c;出现错误&#xff1a;找不到或无法加载主类 com.codingapi.tm.TxManagerApplication 解决方案…

Rest环境搭建:服务提供者和消费者---SpringCloud

Rest环境搭建&#xff1a;服务提供者和消费者 4.1 介绍 我们会使用一个Dept部门模块做一个微服务通用案例Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务。回顾Spring&#xff0c;SpringMVC&#xff0c;Mybatis等以往学习的知识。Maven的分包分模块架构…

Java 多线程 并发编程

转载自 Java 多线程 并发编程 一、多线程 1、操作系统有两个容易混淆的概念&#xff0c;进程和线程。 进程&#xff1a;一个计算机程序的运行实例&#xff0c;包含了需要执行的指令&#xff1b;有自己的独立地址空间&#xff0c;包含程序内容和数据&#xff1b;不同进程的地…

get√—搜索微信公众号【Dotnet跨平台】指定文章的办法

有同学是刚关注“Dotnet跨平台”微信公众号的&#xff0c;结果没看到以前的很多信息&#xff0c;尤其是有用信息&#xff0c;查看历史消息时&#xff0c;有时信息太多&#xff0c;光来回滑动可能要好久&#xff0c;好消息是&#xff0c;微信其实早就支持搜索指定公众号的历史文…

Eureka服务注册中心---SpringCloud

Eureka服务注册中心 5.1 什么是Eureka Netflix在涉及Eureka时&#xff0c;遵循的就是API原则.Eureka是Netflix的有个子模块&#xff0c;也是核心模块之一。Eureka是基于REST的服务&#xff0c;用于定位服务&#xff0c;以实现云端中间件层服务发现和故障转移&#xff0c;服务…