代码珍藏之发送邮件

/**
* 发送重置密码邮件
* @return
*/
@RequestMapping(params="sendResetPwdMail")
@ResponseBody
public AjaxJson sendResetPwdMail(String email,HttpServletRequest request){
AjaxJson ajaxJson = new AjaxJson();
try {
if(StringUtils.isEmpty(email)){
ajaxJson.setSuccess(false);
ajaxJson.setMsg("邮件地址不能为空");
return ajaxJson;
}
TSUser user = systemService.findUniqueByProperty(TSUser.class, "email", email);
if(user == null){
ajaxJson.setSuccess(false);
ajaxJson.setMsg("用户名对应的用户信息不存在");
return ajaxJson;
}
String hql = "from TSPasswordResetkey bean where bean.username = ? and bean.isReset = 0 order by bean.createDate desc limit 1";
List<TSPasswordResetkey> resetKeyList = systemService.findHql(hql,user.getUserName());
if(resetKeyList != null && !resetKeyList.isEmpty()){
TSPasswordResetkey resetKey = resetKeyList.get(0);
Date now = new Date();
if(resetKey.getEmail().equals(email) && (now.getTime() - resetKey.getCreateDate().getTime()) < (1000*60*60*3 - 1000*60*5)){
ajaxJson.setSuccess(false);
ajaxJson.setMsg("已发送重置密码邮件,请稍候再次尝试发送");
return ajaxJson;

}
}
TSPasswordResetkey passwordResetKey = new TSPasswordResetkey();
passwordResetKey.setEmail(email);
passwordResetKey.setUsername(user.getUserName());
passwordResetKey.setCreateDate(new Date());
passwordResetKey.setIsReset(0);
userService.save(passwordResetKey);
String content = ResourceUtil.getConfigByName("resetpwd.mail.content");
if(content.indexOf("${username}") > -1){
content = content.replace("${username}", user.getUserName());
}
String url = request.getScheme() + "://" + request.getServerName()+ ":" + request.getServerPort() + request.getContextPath() +"/loginController.do?goResetPwd&key=" + passwordResetKey.getId();

//配置邮件模板参数
Map<String, Object> mailConfig = new HashMap<String, Object>();
mailConfig.put("title", ResourceUtil.getConfigByName("resetpwd.mail.title"));
mailConfig.put("content",content);
mailConfig.put("url",url);
mailConfig.put("commentUrl","http://www.jeecg.org");

String mailContent = new FreemarkerHelper().parseTemplate("export/mail/password_reset.ftl", mailConfig);

MailUtil.sendEmail(ResourceUtil.getConfigByName("mail.smtpHost"), email,"邮箱重置密码", mailContent, ResourceUtil.getConfigByName("mail.sender"), ResourceUtil.getConfigByName("mail.user"), ResourceUtil.getConfigByName("mail.pwd"));
ajaxJson.setMsg("成功发送密码重置邮件");


} catch (Exception e) {
if("javax.mail.AuthenticationFailedException".equals(e.getClass().getName())){
ajaxJson.setSuccess(false);
ajaxJson.setMsg("发送邮件失败:邮箱账号信息设置错误" );
log.error("重置密码发送邮件失败:邮箱账号信息设置错误",e);
}else{
ajaxJson.setSuccess(false);
ajaxJson.setMsg("发送邮件失败:" + e.getMessage());
log.error("发送邮件失败:" + e.getMessage(),e);
}

}
return ajaxJson;
}

/**
* 发送电子邮件
*
* @param smtpHost
* 发信主机
* @param receiver
* 邮件接收者
* @param title
* 邮件的标题
* @param content
* 邮件的内容
* @param sender
* 邮件发送者
* @param user
* 发送者邮箱用户名
* @param pwd
* 发送者邮箱密码
* @throws MessagingException
*/
public static void sendEmail(String smtpHost, String receiver,
String title, String content, String sender, String user, String pwd) throws MessagingException
{
Properties props = new Properties();
props.put("mail.host", smtpHost);
props.put("mail.transport.protocol", "smtp");
// props.put("mail.smtp.host",smtpHost);//发信的主机,这里要把您的域名的SMTP指向正确的邮件服务器上,这里一般不要动!
props.put("mail.smtp.auth", "true");
Session s = Session.getDefaultInstance(props);
s.setDebug(true);
MimeMessage message = new MimeMessage(s);
// 给消息对象设置发件人/收件人/主题/发信时间
// 发件人的邮箱
InternetAddress from = new InternetAddress(sender);
message.setFrom(from);
InternetAddress to = new InternetAddress(receiver);
message.setRecipient(Message.RecipientType.TO, to);
message.setSubject(title);
message.setSentDate(new Date());
// 给消息对象设置内容
BodyPart mdp = new MimeBodyPart();// 新建一个存放信件内容的BodyPart对象
mdp.setContent(content, "text/html;charset=gb2312");// 给BodyPart对象设置内容和格式/编码方式防止邮件出现乱码
Multipart mm = new MimeMultipart();// 新建一个MimeMultipart对象用来存放BodyPart对
// 象(事实上可以存放多个)
mm.addBodyPart(mdp);// 将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
message.setContent(mm);// 把mm作为消息对象的内容

message.saveChanges();
Transport transport = s.getTransport("smtp");
transport.connect(smtpHost, user, pwd);// 设置发邮件的网关,发信的帐户和密码,这里修改为您自己用的
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}

配置:

mail.smtpHost=smtp.qq.com
mail.sender=826449550@qq.com
mail.user=826449550@qq.com
mail.pwd=*********

原文地址:https://www.cnblogs.com/tjlr/p/9954929.html