spring mail封装了javaMail的邮件服务,让邮件服务使用起来更简单,下面以qq邮箱服务器为例,用spring mail服务来发送邮件
配置qq邮箱,“设置”——“账户”,打开smtp服务,生成授权码
生成授权码需要验证手机,接下来用qq邮箱账号和授权码就可以发送邮件了,不需要qq密码
spring mail服务在spring-context-support中,配置依赖,然后就可以借助qq邮箱提供的发件服务器发送邮件了
1
2
3
4
5
6
7
8
9
10
|
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version> 1.4 . 7 </version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version> 3.2 . 17 .RELEASE</version> </dependency> |
普通文本邮件
首先测试的是普通文本邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package com.xmyself.mail; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; public class Main { public static void main(String[] args) { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost( "smtp.qq.com" ); mailSender.setPort( 587 ); mailSender.setUsername( "573215750@qq.com" ); mailSender.setPassword( "dsruklozelxcbdba" ); //授权码 SimpleMailMessage mail = new SimpleMailMessage(); mail.setTo( "573215750@qq.com" ); mail.setFrom( "573215750@qq.com" ); mail.setSubject( "test mail" ); mail.setText( "test mail content" ); mailSender.send(mail); System.out.println( "success" ); } } |
运行,即可发送一封email,注意:授权码而不是密码,端口并不是25而是587
接下来,保持mailSender不变,修改mail类型,发送内容丰富的邮件
简单html邮件
让邮件内容以html格式展现,只需要修改如下
1
2
3
4
5
6
7
8
9
10
|
MimeMessage mail = mailSender.createMimeMessage(); helper.setTo( "573215750@qq.com" ); helper.setFrom( "573215750@qq.com" ); helper.setSubject( "test mail" ); helper.setText( "<html><head></head><body>" + "<h1>hello!!spring html Mail</h1>" + "</body></html>" , true ); |
依然使用mailSender发送这个mail
mailSender.send(mail);
带图片的html邮件
在邮件的html内容中插入图片显示,修改text内容即可
1
2
3
4
5
6
7
|
helper.setText( "<html><head></head><body>" + "<h1>hello!!spring html Mail</h1>" + "<img src=\"cid:image\" />" + "</body></html>" , true ); FileSystemResource image = new FileSystemResource( new File( "d:/test.jpg" )); helper.addInline( "image" , image); |
带附件的html邮件
为邮件添加附件,text内容不变,只需要修改如下
1
2
3
4
5
6
|
helper.setText( "<html><head></head><body>" + "<h1>hello!!spring html Mail</h1>" + "</body></html>" , true ); FileSystemResource image = new FileSystemResource( new File( "d:/test.jpg" )); helper.addAttachment( "test.jpg" , image); |
freemarker模板邮件
html内容通常非常丰富,直接写在setText()方法中实在太乱了,所以,应该将html作为一个文件单独管理,然后用工具将其内容转换为字符串,作为setText()的参数,下面以freemarker模板引擎为例
在工程src/main/resources目录下新建templates目录,里面放一个test.ftl文件,内容如下
1
2
3
4
5
6
7
|
< html > < head ></ head > < body > < p >test freemarker template, welcome ${username}</ p > < img src = "cid:image" /> </ body > </ html > |
然后,用freemarker和spring提供的工具将内容转换为字符串,这当然需要依赖新的jar
1
2
3
4
5
|
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version> 2.3 . 23 </version> </dependency> |
新建FreemarkerParser.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package com.xmyself.mail; import java.util.Map; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import freemarker.template.Configuration; import freemarker.template.Template; public class FreemarkerParser { public String toHtmlString(String name, Map<String, String> data) { @SuppressWarnings ( "deprecation" ) Configuration config = new Configuration(); config.setClassForTemplateLoading( this .getClass(), "/templates/" ); try { Template template = config.getTemplate(name); return FreeMarkerTemplateUtils.processTemplateIntoString(template, data); } catch (Exception e) { e.printStackTrace(); } return "fail" ; } } |
用map中的值替换掉模板中的${}内容,将模板文件转换为String字符串
注意:过程中模板路径的配置与读取是个麻烦事,暂时以这种方式处理
发送邮件的代码只需要非常小的变化
1
2
3
4
5
6
7
|
Map<String, String> data = new HashMap<String, String>(); data.put( "username" , "chengyi" ); String text = new FreemarkerParser().toHtmlString( "test.ftl" , data); helper.setText(text, true ); FileSystemResource image = new FileSystemResource( new File( "d:/test.jpg" )); helper.addInline( "image" , image); |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/ywlaker/p/6164809.html