Spring的邮件发送操作简单,使用方便,通过xml文件中bean的配置,可以进一步简化操作。
除了Spring的相关jar包外,还需要mail.jar(在使用MyEclipse 6.0时,web工程引用的J2EE 1.4 Libraries中的mail.jar会引起jar包冲突,导致发送邮件时授权验证失败,需将此jar包引用去除)。
1.获取邮件发送器
1)代码方式:
JavaMailSenderImpl sender = new JavaMailSenderImpl();
// 设定Mail Server及端口号
sender.setHost("smtp.163.com");
sender.setPort(xxx);
// SMTP验证时,需要用户名和密码
sender.setUsername("xxx");
sender.setPassword("xxx");
2)xml中bean配置方式(相关配置信息放置在属性文件中):
<!-- 邮件发送 -->
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<value>${email.host}</value>
</property>
<property name="port">
<value>${email.port}</value>
</property>
<property name="username">
<value>${email.username}</value>
</property>
<property name="password">
<value>${email.password}</value>
</property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<!—自定义的属性,可在代码中获取 -->
<prop key="sendFrom">${email.sendFrom}</prop>
</props>
</property>
</bean>
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
// 获取邮件发送器
JavaMailSenderImpl sender = (JavaMailSenderImpl) wac.getBean("mailSender");
// 获取配置的发送人邮件地址
String sendFrom = (String) sender.getJavaMailProperties().get("sendFrom");
2.邮件对象的创建
1)简单文本邮件
public static void main(String[] arg) throws Exception {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
//设定Mail Server及端口号
sender.setHost("smtp.163.com");
sender.setPort(xxx);
// SMTP验证时,需要用户名和密码
sender.setUsername("xxx");
sender.setPassword("xxx");
//建立简单文本邮件
SimpleMailMessage mailMessage = new SimpleMailMessage();
//设定收件人、寄件人、主题与内文
mailMessage.setFrom("xxx");
mailMessage.setTo("xxx");//数组发送给多个联系人
mailMessage.setSubject("Test");
mailMessage.setText("This is a test mail");
// 传送邮件
sender.send(mailMessage);
System.out.println("邮件传送OK..");
}
2)可带附件邮件
public static void main(String[] arg) throws Exception {
JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
// 设定Mail Server及端口号
senderImpl.setHost("smtp.163.com");
senderImpl.setPort(xxx);
senderImpl.setUsername("xxx");
senderImpl.setPassword("xxx");
//创建Mime邮件(可包含附件、设置为html格式)
MimeMessage mailMessage = senderImpl.createMimeMessage();
/*
*Create a new MimeMessageHelper for the given MimeMessage,
*in multipart mode (supporting alternative texts, inline elements and attachments) if requested.
*/
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8");
// 设定收件人、寄件人、主题与内文
messageHelper.setFrom("xxx");
messageHelper.setTo("xxx");
messageHelper.setSubject("Test");
// true 表示启动HTML格式的邮件
messageHelper.setText(
"<html><head></head><body><h1>hello!</h1></body></html>", true);
File file = new File("d:/test.xlsx");
if (file.exists()) {
// 添加附件并对文件名处理,避免中文乱码
FileSystemResource fileAdd = new FileSystemResource(file);
messageHelper.addAttachment(MimeUtility.encodeWord(fileAdd.getFilename()),
fileAdd);
}
// 传送邮件
senderImpl.send(mailMessage);
System.out.println("邮件传送OK..");
}
3)邮件内容使用模板
在创建html邮件时可以使用模板技术生成邮件正文内容,例中使用FreeMarker,添加jar包文件freemarker.jar。
创建模板文件src/mailTemplate/mailTemplate.ftl,内容如下:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf8">
</head>
<body>
${user} 您好!<br/>
。。。。。。。
<br/><br/>
---------------------------------
<br/>
${currentDate}<br/>
联系人:刘德华<br/>
电话 :18688886666<br/>
邮箱 :liudehua@163.com<br/>
</body>
</html>
发送邮件业务类中FreeMarker配置类注入:
private FreeMarkerConfigurer freeMarker;
public void setFreeMarker(FreeMarkerConfigurer freeMarker) {
this.freeMarker = freeMarker;
}
xml中对应bean配置:
<bean id="freeMarker"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!--指定模板文件目录-->
<property name="templateLoaderPath"
value="classpath:mailTemplate" />
<!-- 设置FreeMarker环境属性-->
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">1800</prop><!--刷新模板的周期,单位为秒-->
<prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->
<prop key="locale">zh_CN</prop><!-- 本地化设置-->
</props>
</property>
</bean>
根据模板获取邮件正文内容方法:
//根据模板文件获取邮件内容
private String getEmailContent() {
try {
//获取模板文件
Template template = freeMarker.getConfiguration().getTemplate("mailTemplate.ftl");
//对模板中的可变信息进行配置
Map<String, String> map = new HashMap<String, String>();
map.put("user","xxx");
map.put("currentDate",Util.getNowDate("yyyy-MM-dd"));
String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
return content;
} catch (TemplateException e) {
logger.error("Error while processing FreeMarker template ", e);
} catch (FileNotFoundException e) {
logger.error("Error while open template file ", e);
} catch (IOException e) {
logger.error("Error while generate Email Content ", e);
}
return "";
}
其它操作可参考:
http://www.open-open.com/lib/view/open1338109120604.html
分享到:
相关推荐
java 发送邮件 spring发送邮件Mail
Spring实现各种邮件的发送 简单配置就可发送邮件
Spring Boot整合邮件发送并保存历史发送邮箱 项目描述 项目主要是使用 Spring Boot 发送邮件,主要的技术点有: 1、Spring Boot +mybatis的整合 2、Spring Boot项目中jsp的使用 3、Spring Boot 发送邮件...
利用spring下的一个类进行邮件发送,内附具体用法
Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender,和值对象SimpleMailMessage,它封装了简单邮件的属性如from, to,cc, subject,text。 包里还包含一棵以...
Spring 封装的JavaMail,使邮件发送变的相当简单,我通过Spring的邮件发送实现了发纯文本形的内容,HTMl,带附件,带图片等示例代码,并自行测试过.希望对初学者有帮助
Spring整合Quartz定时发送邮件
Spring邮件发送服务(java邮件发送),支持多附件、多人发送/抄送/暗送
spring+velocity发送邮件,spring+velocity发送邮件
Spring Boot邮件发送(powernode document)(源代码) 1.概述 2.最佳实践 2.1创建项目引入依赖(mail) 2.2修改yml配置文件 2.3编写测试发送邮件 2.4 测试结果 2.4.1 发送基本内容 2.4.2 发送复杂内容 我们使用java...
pdf介绍spring-boot-邮件发送。 Spring Boot通过集成spring-boot-starter-mail依赖和相关配置,可以方便地实现邮件发送功能。具体的步骤: 添加依赖:在Spring Boot项目的pom.xml文件中加入spring-boot-starter-mail...
Spring Boot邮件发送(powernode CD2207)(教学视频+源代码) SpringBoot提供了发送邮件的功能 SpringBoot实现邮件功能是非常的方便快捷的,因为SpringBoot默认有starter实现了Mail。 发送邮件应该是网站的必备功能...
用spring发送邮件,该功能在一般系统监控中经常用到。
使用Spring Boot 开发支持多附件邮件发送微服务平台代码
Spring邮件发送系统:基于Java构建,包含67个文件,包括60个XML配置文件、3个Java类文件、2个.gitignore文件、1个Idea项目文件(.iml)和1个YAML配置文件。该项目是一个Spring email的最简单入门案例,用于演示如何...
基于spring mvc 框架,用freemarker创建邮件模板,包括详细邮件发送功能的spring配置和实现代码
struts spring 实现简单的邮件发送, 下载后加入相应的lib即可使用(由于权限,我上传不上来)。
spring的扩展,邮件的发送与定时任务的处理
使用Spring mail发送邮件的完整实例,包含代码与Spring mail的jar,可直接运行与使用。相关学习文档参考博客《Spring Mail邮件发送 http://blog.csdn.net/chenxiang0207/article/details/8256528》。