記錄一次在工作使用Spring框架,發(fā)送郵件的demo新荤。
依賴jar
注意一下揽趾,我使用的是gradle,使用maven的需要通過maven的方式引入jar包依賴苛骨。
compile group: 'com.sun.mail', name: 'javax.mail', version: '1.6.0'
compile group: 'org.apache.velocity', name: 'velocity', version: '1.7'
compile 'org.springframework:spring-context-support'
具體實現(xiàn)
@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender mailSender;
public VelocityEngine getVelocityEngine() {
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.setProperty("resource.loader", "class");
velocityEngine.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
velocityEngine.setProperty("input.encoding", "UTF-8");
velocityEngine.setProperty("output.encoding", "UTF-8");
velocityEngine.init();
return velocityEngine;
}
private static MimeMessageHelper helper(MimeMessage mimeMessage)throws Exception{
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
List<String> tos = new ArrayList<>();
// 接收郵件的地址 集合 可以為多個
// tos.add("service@*.com");
tos.add("service2@*.com");
helper.setFrom("service@*.com");
String[] strings = (String[])tos.toArray(new String[tos.size()]);
helper.setTo(strings);
return helper;
}
@Override
public void sendMail(Map<String, Object> map) throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = helper(mimeMessage);
// 設置郵件主題
helper.setSubject("overdue");
// 需要填充到模板中的內容
Map<String, Object> model = new HashedMap();
model.put("hospital", map.get("hospital"));
String template = (String) map.get("template");
// 得到模板 并填充內容篱瞎,模板地址根據自己的實際情況所定
String text = VelocityEngineUtils.mergeTemplateIntoString(
getVelocityEngine(), "template/" + template, "UTF-8", model);
helper.setText(text, true);
// 發(fā)送郵件
mailSender.send(mimeMessage);
}
}
模板實例
在resources目錄下,新建一個template文件夾痒芝,新建一個 *.vm 文件奔缠,注意文件后綴為 .vm
如圖所示:
模板中內容為:
<html>
<body>
<div>
test
<p>hospital: ${hospital}</p>
</div>
</body>
</html>
** 注意 ${hospital}
和service中model字段相對應。
配置發(fā)送郵件的密碼
基本代碼寫好之后吼野,我們需要在 application.yml
中配置一下郵件的用戶名密碼等校哎;
spring:
mail:
default-encoding: utf-8
host: smtp.exmail.qq.com # 郵箱host,不同的郵箱host是不一樣的,這個列子是騰訊企業(yè)郵的闷哆,具體可以google腰奋。
username: service@*.com # 發(fā)送郵箱的用戶名, 替換為自己的
password: 123456 # 填寫自己郵箱的密碼抱怔,如果是QQ郵箱劣坊,應該是需要填寫授權碼
測試用例
現(xiàn)在基本代碼洗好了,我們接著寫一個測試用例
我的項目所用的是springboot屈留,具體情況視自己項目的情況而定局冰。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = OverdueApplication.class)
@ActiveProfiles("ubuntu")
@Ignore
public class MailTest {
@Autowired
private MailService mailService;
@Test
public void testSendMail() {
Map<String, Object> map = new HashMap<>();
// 模板中的變量
map.put("hospital", "test hospital");
// 對應的郵件模板 文件名
map.put("template", "overdueMail.vm");
try {
mailService.sendMail(map);
} catch (Exception e) {
e.printStackTrace();
}
}
}
結果
這樣,一件簡單的郵件模板發(fā)送就成功了灌危。