当用户密码忘记时,可以通过JavaMail自动发送邮件给用户,以便使用户方便去修改密码。以下详细介绍如何在SSI框架中实现JavaMail发送邮件。
业务处理层Service实现:
public void sendMessage(StaffPO toStaff, String content, String fromMailbox,int fromMailboxpwd,String contextPath){
// 获取域名
String emailDomain=toStaff.getSecretEmail().substring(toStaff.getSecretEmail().indexOf("@")+1);
//设置邮件属性
Properties pros = new Properties();
// 存储发送邮件服务器的信息
pros.put("mail.smtp.host", "smtp." + emailDomain);
//通过验证
pros.put("mail.smtp.auth", "true");
//根据属性建立一个会话
Session s=Session.getInstance(pros);
s.setDebug(true);
// 由邮件会话建立一个消息对象
MimeMessage message = new MimeMessage(s);
try{
//设置邮件
InternetAddress fromEmail = new InternetAddress(fromMailbox);
// 设置发信人
message.setFrom(fromEmail);
InternetAddress toEmail = new InternetAddress(toStaff.getSecretEmail());
// 设置收信人,并设置其接受类型为TO
message.setRecipient(Message.RecipientType.TO, toEmail);
// 设置主题
message.setSubject("用户您好,winclass管理重置密码确认信");
// 设置内容
//System.out.println(Struts2BaseAction.getText());
message.setContent("尊敬的用户您好,请点击以下链接重置密码"+"<html><body><br><a href='"+contextPath+"/pages/modules/staff/resetPassword.jsp'>点击这里设置密码</a></body></html>","text/html; charset=UTF-8");
// 设置日期
message.setSentDate(new Date());
message.saveChanges();
Transport transport = s.getTransport("smtp");
transport.connect("smtp."
+ fromMailbox.substring(fromMailbox.indexOf("@") + 1),
fromMailbox.substring(0, fromMailbox.indexOf("@")), String
.valueOf(fromMailboxpwd));
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch(Exception e){
e.printStackTrace();
log.error("发送邮件失败,用户名=" + toStaff.getSecretEmail() + "\t"
+ e.getMessage());
throw new Exception(); }
}
}
在Action层直接接受用户输入的邮箱地址,获取域名实现如下:
emailDomain=this.getStaff().getSecretEmail().substring(this.getStaff().getSecretEmail().indexOf("@")+1);
//发送邮件
this.getStaffService().sendMessage(staff, content,"[email protected]",111111,this.getText("host")+this.getRequest().getContextPath());
发送邮件的邮箱地址和密码,即可实现JavaMail发送邮件。
注意点:
1.在设置发送邮件内容时候,如果发送的内容里包含url,则使用setContent();如果是纯文本可以使用setText()和setContent()都可以。
2.在setContent()中的href是设置的动态url,href=contextPath是通过this.getText("host")+this.getRequest().getContextPath()动态获取的,其中"host"是在property文件中设置好的:host=http://localhost:8080,在发送邮件时候动态获取即可。