package com.mifan.article.article; import com.mifan.article.AbstractTests; import com.mifan.article.domain.Seeds; import com.mifan.article.domain.StatisticsCount; import com.mifan.article.service.SeedsService; import com.mifan.article.service.StatisticsCountService; import freemarker.template.Template; import freemarker.template.TemplateException; import org.junit.Test; import org.moonframework.model.mybatis.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.security.Security; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * Created by LiuKai on 2017/11/17. */ public class MailTest1 extends AbstractTests { @Autowired private StatisticsCountService statisticsCountService; //发件服务器地址:smtp.ym.163.com public static String smtpServer = "smtp.xxxxx.cn"; public static String smtpServerPort = "25"; public static String serverUsername = "lxxxxi@mxxxxg.cn"; public static String serverPassword = "xxxxxx"; @Autowired private FreeMarkerConfigurer freeMarkerConfigurer; //传入要发的地址和要发送的内容 private static void send(String to, String mailSubject, String message,Boolean SSLBool) { System.out.println("正在发送邮件至::[" + to + "]..."); try { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; //设置邮件会话参数 Properties props = new Properties(); //邮箱的发送服务器地址 props.put("mail.smtp.auth", "true"); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.host", smtpServer); if (SSLBool){ props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); } props.setProperty("mail.smtp.socketFactory.fallback", "false"); //邮箱发送服务器端口,这里设置为465端口 props.setProperty("mail.smtp.port", smtpServerPort); props.setProperty("mail.smtp.socketFactory.port", smtpServerPort); final String username = serverUsername; final String password = serverPassword; //获取到邮箱会话,利用匿名内部类的方式,将发送者邮箱用户名和密码授权给jvm Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); //通过会话,得到一个邮件,用于发送 Message msg = new MimeMessage(session); //设置发件人 msg.setFrom(new InternetAddress(serverUsername)); //设置收件人,to为收件人,cc为抄送,bcc为密送 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false)); //邮件标题 msg.setSubject(mailSubject); //设置邮件消息 msg.setContent(message, "text/html;charset=UTF-8"); //设置发送的日期 msg.setSentDate(new Date()); //调用Transport的send方法去发送邮件 Transport.send(msg); System.out.println("发送成功..."); } catch (Exception e) { e.printStackTrace(); System.out.println("发送失败!!!!"); } } /** * 得到邮件的内容 */ public static String getMailText(FreeMarkerConfigurer freeMarkerConfigurer, String templateName,Map<String, Object> map) throws Exception { String htmlText = ""; // 通过指定模板名获取FreeMarker模板实例 Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate(templateName); // FreeMarker通过Map传递动态数据 // 解析模板并替换动态数据,最终content将替换模板文件中的${content}标签。 htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl, map); return htmlText; } @Test public void test() { String to = "xxxxx@qq.com,lxxxi@xxxx.com"; Map<String, Object> templateMap = new HashMap<>(); String date= new SimpleDateFormat("yyyy-MM-dd").format(new Date().getTime()-24*60*60*1000).toString(); List<StatisticsCount> list001= statisticsCountService.findAll(Restrictions.eq(StatisticsCount.SPIDER_DATE,date)); templateMap.put("title", date+" 米饭星每日数据抓取报告"); templateMap.put("lists",list001); templateMap.put("amounts",list001.stream().collect(Collectors.summingLong(StatisticsCount::getAmount))); String mailSubject = date+" 米饭星每日数据抓取报告"; try { MailTest1.send(to, mailSubject, getMailText(freeMarkerConfigurer, "emailTemp.ftl", templateMap),Boolean.FALSE); } catch (Exception e) { e.printStackTrace(); } } }
JavaMail邮件写法
最新推荐文章于 2022-11-07 15:41:47 发布