项目中有时会遇到发送邮件的需求。
比如: 找回密码,用户注册发送邮件点击链接激活。
javamail的使用方式很灵活,下面就记录其中一种方式。
主要三个步骤:
1、创建session
2、通过session创建message(过程中使用了MimeMessageHelper辅助构建)
3、使用Transport.send 方法发送邮件
//使用session创建message MimeMessage mailMessage = new MimeMessage(getSession()); //使用spring提供的messageHelper帮助构建message
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true,"UTF-8");
messageHelper.setFrom(PropertiesAccessUtil.getString("mail.from", ""));
//mailContent是自己写的存放参数的类 //从传入的参数中获取接收人 if(mailContent.getTo().isEmpty()){ return; } for(String to: mailContent.getTo()){ messageHelper.addTo(to); } //从传入的参数中获取抄送人 for(String cc : mailContent.getCc()){ messageHelper.addCc(cc); }
//设置标题
messageHelper.setSubject(PropertiesAccessUtil.getString(mailContent.getSendType().template+".title", "NO TITLE"));
//通过自定义的模板+参数 构造邮件内容
String template=PropertiesAccessUtil.getString(mailContent.getSendType().template+".content", "");
String content = buildContent(template,mailContent.getParams());
//设置邮件内容, true 表示启动HTML格式的邮件
messageHelper.setText(content, true);
//发送邮件 Transport.send(mailMessage);
public Session getSession() { if(mysession == null){ Properties prop = new Properties(); try { //启用SSL认证(QQ邮箱必须,其它未测试) MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); //smtp.exmail.qq.com QQ企业邮箱 prop.setProperty("mail.smtp.host", getHost()); //465 prop.put("mail.smtp.port", getPort()); prop.setProperty("mail.transport.protocol", "smtp"); prop.setProperty("mail.smtp.auth", "true"); prop.setProperty("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); } catch (Exception e) { logger.error("<><>",e); } //使用getDefaultInstance方法获取session,第二个参数是一个认证类,里面包含了用户名和密码 mysession = Session.getDefaultInstance(prop, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(getUsername(),getPassword()); } }); mysession.setDebug(true); } return mysession; }