springboot + maven + mail
springboot + maven + mail 发送邮件
- springboot 使用yml配置文件 代替 properties文件
- maven 依赖
- 调用springframework相关方法代码
- 自定义bean 覆盖
配置文件 yml 注意缩进
mymail:
host: smtp.126.com
port: 25
username: *********@126.com
password: ****
simplemsg:
from: ******@126.com
subject: ******
freemarker:
templateLoaderPath: classpath:freemarker
locale: zh_CN
default_encoding: UTF-8
快捷键
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y
相关maven依赖
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
代码
MyJavaMailSender.java
主要配置com.mob.dispatcher.config.javamail的相关参数,也可以使用xml进行配置
package com.mob.dispatcher.config.javamail;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Component;
import java.util.Properties;
/**
* Created by sixm on 2017/11/2.
*/
@Data
@RefreshScope
@ConfigurationProperties(
prefix = "mymail"
)
@Component
public class MyJavaMailSender {
// @Value("${mail.host}")
private String host;
// @Value("${mail.port}")
private int port;
// @Value("${mail.username}")
private String username;
// @Value("${mail.password}")
private String password;
@Bean
public JavaMailSenderImpl getJavaMailSenderImpl() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(host);
javaMailSender.setPort(port);
javaMailSender.setUsername(username);
javaMailSender.setPassword(password);
Properties javaMailProperties = new Properties();
javaMailProperties.setProperty("mail.smtp.auth", "true");
javaMailSender.setJavaMailProperties(javaMailProperties);
return javaMailSender;
}
}
MyFreeMarkerConfigurer
(org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;)
package com.mob.dispatcher.config.javamail;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import java.util.Properties;
/**
* Created by sixm on 2017/11/2.
*/
@Data
@ConfigurationProperties(
prefix = "mymail.freemarker"
)
@Component
public class MyFreeMarkerConfigurer {
private String templateLoaderPath;
private String locale;
private String default_encoding;
@Bean
public FreeMarkerConfigurer getFreeMarkerConfigurer() {
FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
Properties properties = new Properties();
properties.setProperty("locale", locale);
properties.setProperty("default_encoding", default_encoding);
freeMarkerConfigurer.setFreemarkerSettings(properties);
return freeMarkerConfigurer;
}
}
MySimpleMailMessage
(org.springframework.mail.SimpleMailMessage;)
package com.mob.dispatcher.config.javamail;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Component;
/**
* Created by sixm on 2017/11/2.
*/
@RefreshScope
@ConfigurationProperties(
prefix = "mymail.simplemsg"
)
@Data
@Component
public class MySimpleMailMessage {
private String from;
private String subject;
@Bean
public SimpleMailMessage getSimpleMailMessage() {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setSubject(subject);
simpleMailMessage.setFrom(from);
return simpleMailMessage;
}
}
发送邮件类MailSender
package com.mob.dispatcher.config.javamail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import freemarker.template.Template;
import javax.mail.internet.MimeMessage;
import java.util.HashMap;
import java.util.Map;
/**
* Created by sixm on 2017/11/2.
*/
@Component
public class MailSender {
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private SimpleMailMessage simpleMailMessage;
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
/**
*
* @Description: 从模板中构建邮件内容
* @param nickName 用户昵称
* @param content 邮件内容
* @param email 接受邮件
*
* Created by sixm on 2017/11/2.
*/
public void send(String nickName, String content, String email) {
String to = email;
String text = "";
Map<String, String> map = new HashMap<String, String>(1);
map.put("nickName", nickName);
map.put("content", content);
try {
// 根据模板内容,动态把map中的数据填充进去,生成HTML
Template template = freeMarkerConfigurer.getConfiguration().getTemplate("mail.ftl");
// map中的key,对应模板中的${key}表达式
text = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
} catch (Exception e) {
e.printStackTrace();
}
sendMail(to, null, text);
}
/**
*
* @Description: 执行发送邮件
* @param to 收件人邮箱
* @param subject 邮件主题
* @param content 邮件内容
*
*Created by sixm on 2017/11/2.
*/
public void sendMail(String to, String subject, String content) {
try {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
messageHelper.setFrom(simpleMailMessage.getFrom());
if (subject != null) {
messageHelper.setSubject(subject);
} else {
messageHelper.setSubject(simpleMailMessage.getSubject());
}
messageHelper.setTo(to);
messageHelper.setText(content, true);
javaMailSender.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
发送模版 mail.ftl
文件位置:resourse.freemarket.mail.ftl.
文件位置要和配置文件相对应
可以根据不同的场景,配置不同的模版并指定即可。
<h2><font color="green">${nickName}</font></h2>
<p>${content}</p>
调用@Test
import com.mob.dispatcher.MobDispatcherApplication;
import com.mob.dispatcher.config.javamail.MailSender;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* Created by sixm on 2017/11/2.
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MobDispatcherApplication.class)
public class MailTest {
@Autowired
private MailSender mailSender;
@Test
public void sendMail(){
mailSender.sendMail("******@qq.com","周末聚合","米其林");
}
}
注意:
部分有将服务器比如126 、 163等,会讲重复度高、有特殊字符的邮件当作垃圾邮件,并拦截。
根据返回代码可以参考: 网易退信链接