这是一个关于邮件发送的小demo,利用freemarker设置邮件模版与内容,并运用javax mail 进行发送邮件给多个收件人。
- 模版。 在resources下面创建一个templates文件夹,并写一个.ftl 结尾的文件作为模版,也可以为.html
<div >
<table>
<tr>
<td>名称:<span>${(name)!""}</span></td>
</tr>
<tr>
<td>日期:<span>${(date)!""}</span></td>
</tr>
<tr>
<td>总人数:<span>${(total)!""}</span>人</td>
</tr>
<tr>
<td>出席人数:<span>${(present)!""}</span>人</td>
</tr>
<tr>
<td>请假人数: <span>${(leave)!""} </span>人</td>
</tr>
</table>
<h4>请立登录xxxx查看详情。</h4>
</div>
<style>
body{font-size: 14px}
span{font-weight: bold}
</style>
- 邮件内容的实体类
public class Person {
private String name;
private String date;
private Integer total;
private Integer present;
private Integer leave;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getDate() { return date; }
public void setDate(String date) { this.date = date; }
public Integer getTotal() { return total; }
public void setTotal(Integer total) { this.total = total; }
public Integer getPresent() { return present; }
public void setPresent(Integer present) { this.present = present; }
public Integer getLeave() { return leave; }
public void setLeave(Integer leave) { this.leave = leave; }
}
- 读取模版,并替换占位
public class test {
public static String getContent(){
Configuration cfg = new Configuration(Configuration.VERSION_2_3_29);
TemplateLoader templateLoader =null;
templateLoader = new ClassTemplateLoader(test.class,"/templates");
String path = "message.ftl";
cfg.setTemplateLoader(templateLoader);
Writer out = new StringWriter();
Person data = new Person();
data.setName("xxx会议");
data.setDate("2020-01-01");
data.setPresent(50);
data.setLeave(5);
data.setTotal(55);
try {
Template template=cfg.getTemplate(path,"UTF-8");
template.process(data, out);
String string = out.toString();
out.close();
System.out.println(string);
return string;
} catch (IOException | TemplateException e) {
e.printStackTrace();
}
return null;
}
}
- 发送邮件 (这里需要根据不同的邮箱获取相关的发件人信息才能发送,可登录邮箱进行设置)
public class SendMail {
public SendMail(){
//做链接前的准备工作 也就是参数初始化
Properties properties = new Properties();
properties.setProperty("mail.smtp.host","smtp.126.com");//发送邮箱服务器
properties.setProperty("mail.smtp.port","465");//发送端口
properties.setProperty("mail.smtp.auth","true");//是否开启权限控制
properties.setProperty("mail.debug","true");//true 打印信息到控制台
properties.setProperty("mail.transport","smtp");//发送的协议是简单的邮件传输协议
properties.setProperty("mail.smtp.ssl.enable","true");
//建立两点之间的链接
Session session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("发件人邮箱","发件人邮箱密码");
}
});
//创建邮件对象
Message message = new MimeMessage(session);
try {
//设置发件人
message.setFrom(new InternetAddress("发件人的邮箱"));
//设置收件人
// 单个收件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress("450455108@qq.com"));//收件人
// 多个收件人 (例如,收件人是用 ‘;’ 隔开的字符串)
String receiver="xxx@126.com;450455108@qq.com";
String[] split = receiver.split(";");
InternetAddress[] address = new InternetAddress[split.length];
for (int i = 0; i < split.length; i++) {
address[i] = new InternetAddress(split[i]);
}
message.setRecipients(Message.RecipientType.TO, address);
// 也可以设置 CC 和 BCC
// message.setRecipients(Message.RecipientType.BCC, address);
// message.setRecipients(Message.RecipientType.CC, address);
//设置主题
message.setSubject("subject");
//设置邮件正文 邮件发送的类型
test test = new test();
String content = test.getContent();
message.setContent(content,"text/html;charset=UTF-8");
//发送一封邮件
Transport transport = session.getTransport();
transport.connect("发送人的邮箱","发送人的邮箱密码");
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}finally {
}
}
public static void main(String[] args) {
SendMail SendMail = new SendMail();
}
}
- 这时可以发个邮件测试了