JavaMail发送邮件

当用户密码忘记时,可以通过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,在发送邮件时候动态获取即可。

你可能感兴趣的:(exception,String,struts,properties,javamail,邮件服务器)