java实现发邮件的代码

来源:互联网 发布:fanuc数控系统pmc编程 编辑:程序博客网 时间:2024/05/03 00:11

所需要的jar可以到我的资源下载里面例子,以下只是自己的总结备份

MailSenderInfo.java

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package com.oct.util;


import java.util.Properties;


public class MailSenderInfo {
// 发送邮件的服务器的IP和端口    
    private String mailServerHost;    
    private String mailServerPort = "25";
    // 邮件发送者的地址    
    private String fromAddress;    
    // 邮件接收者的地址    
    private String toAddress;    
    // 登陆邮件发送服务器的用户名和密码    
    private String userName;    
    private String password;    
    // 是否需要身份验证    
    private boolean validate = false;    
    // 邮件主题    
    private String subject;    
    // 邮件的文本内容    
    private String content;    
    // 邮件附件的文件名    
    private String[] attachFileNames;      
    /** *//**   
      * 获得邮件会话属性   
      */    
    public Properties getProperties(){
      Properties p = new Properties();    
      p.put("mail.smtp.host", this.mailServerHost);    
      p.put("mail.smtp.port", this.mailServerPort);    
      p.put("mail.smtp.auth", validate ? "true" : "false");    
      return p;    
    }    
    public String getMailServerHost() {    
      return mailServerHost;    
    }    
    public void setMailServerHost(String mailServerHost) {    
      this.mailServerHost = mailServerHost;    
    }   
    public String getMailServerPort() {    
      return mailServerPort;    
    }   
    public void setMailServerPort(String mailServerPort) {    
      this.mailServerPort = mailServerPort;    
    }   
    public boolean isValidate() {    
      return validate;    
    }   
    public void setValidate(boolean validate) {    
      this.validate = validate;    
    }   
    public String[] getAttachFileNames() {    
      return attachFileNames;    
    }   
    public void setAttachFileNames(String[] fileNames) {    
      this.attachFileNames = fileNames;    
    }   
    public String getFromAddress() {    
      return fromAddress;    
    }    
    public void setFromAddress(String fromAddress) {    
      this.fromAddress = fromAddress;    
    }   
    public String getPassword() {    
      return password;    
    }   
    public void setPassword(String password) {    
      this.password = password;    
    }   
    public String getToAddress() {    
      return toAddress;    
    }    
    public void setToAddress(String toAddress) {    
      this.toAddress = toAddress;    
    }    
    public String getUserName() {    
      return userName;    
    }   
    public void setUserName(String userName) {    
      this.userName = userName;    
    }   
    public String getSubject() {    
      return subject;    
    }   
    public void setSubject(String subject) {    
      this.subject = subject;    
    }   
    public String getContent() {    
      return content;    
    }   
    public void setContent(String textContent) {    
      this.content = textContent;    
    }    


}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

MD5Util.java

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package com.oct.util;


import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class MD5Util {

/**
* 将源字符串使用MD5加密为字节数组
* @param source
* @return
*/
public static byte[] encode2bytes(String source) {
byte[] result = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.reset();
md.update(source.getBytes("UTF-8"));
result = md.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

return result;
}

/**
* 将源字符串使用MD5加密为32位16进制数
* @param source
* @return
*/
public static String encode2hex(String source) {
byte[] data = encode2bytes(source);


StringBuffer hexString = new StringBuffer();
for (int i = 0; i < data.length; i++) {
String hex = Integer.toHexString(0xff & data[i]);

if (hex.length() == 1) {
hexString.append('0');
}

hexString.append(hex);
}

return hexString.toString();
}

/**
* 验证字符串是否匹配
* @param unknown 待验证的字符串
* @param okHex使用MD5加密过的16进制字符串
* @return 匹配返回true,不匹配返回false
*/
public static boolean validate(String unknown , String okHex) {
return okHex.equals(encode2hex(unknown));
}

}

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

MyAuthenticator.java
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package com.oct.util;


import javax.mail.*;   


public class MyAuthenticator extends Authenticator{   
    String userName=null;   
    String password=null;   
        
    public MyAuthenticator(){   
    }   
    public MyAuthenticator(String username, String password) {    
        this.userName = username;    
        this.password = password;    
    }    
    protected PasswordAuthentication getPasswordAuthentication(){   
        return new PasswordAuthentication(userName, password);   
    }
    public static void main(String[] args){   
        //这个类主要是设置邮件   
     MailSenderInfo mailInfo = new MailSenderInfo();    
     mailInfo.setMailServerHost("smtp.qq.com");//目前仅限于QQ邮箱发送邮件
     mailInfo.setMailServerPort("25");
     mailInfo.setValidate(true);    
     mailInfo.setUserName("88888888@qq.com");//你邮箱账号
     mailInfo.setPassword("8888888");//你的邮箱密码    
     mailInfo.setFromAddress("88888888@qq.com");//你的邮箱地址
     mailInfo.setToAddress("999999999@qq.com");//对方邮箱地址
     mailInfo.setSubject("我很希望你能收到");//邮件标题
     mailInfo.setContent("恭喜你,你的账号获得我公司抽取的二等奖.三星笔记本电脑一台.加9999元现金!等我回来了去银行领取!");//邮件类容    
  // 发送邮件
  StringBuffer sb = new StringBuffer(
  "点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!</br>");
  sb.append(
  "<a href=\"url?email.email=")//此处需要改
  .append(1)
  .append("&email.validateCode=")
  .append(1)
  .append("\">url?email.email=")//此处需要改
  .append(1).append("&email.validateCode=")
  .append(1).append("</a>");
  mailInfo.setContent(sb.toString());
     //这个类主要来发送邮件   
     SimpleMailSender sms = new SimpleMailSender();   
         //sms.sendTextMail(mailInfo);//发送文体格式    
         sms.sendHtmlMail(mailInfo);//发送html格式   
   }  


}   


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SendUtil.java

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package com.oct.util;


import javax.mail.Authenticator;


public class SendUtil  extends Authenticator{

public static MailSenderInfo sendInfo(String email,String validateCode){
  //这个类主要是设置邮件   
    MailSenderInfo mailInfo = new MailSenderInfo();    
    mailInfo.setMailServerHost("smtp.qq.com");//目前仅限于QQ邮箱发送邮件
    mailInfo.setMailServerPort("25");
    mailInfo.setValidate(true);    
    mailInfo.setUserName("888888@qq.com");//你邮箱账号
    mailInfo.setPassword("123");//你的邮箱密码    
    mailInfo.setFromAddress("88888@qq.com");//你的邮箱地址
    mailInfo.setToAddress(email);//对方邮箱地址
    mailInfo.setSubject("智慧景区注册邮箱验证");
    StringBuffer sb = new StringBuffer(
"点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!</br>");
sb.append(
"<a href=\"url?email.email=")
.append(email)
.append("&email.validateCode=")
.append(validateCode)
.append("\">url?email.email=")
.append(email).append("&email.validateCode=")
.append(validateCode).append("</a>");
mailInfo.setContent(sb.toString());
SimpleMailSender sms = new SimpleMailSender(); 
sms.sendHtmlMail(mailInfo);//发送html格式   
    return mailInfo;



}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SimpleMailSender.java

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package com.oct.util;


import java.util.Date;
import java.util.Properties;


import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
  
/** *//**   
* 简单邮件(不带附件的邮件)发送器   
http://www.bt285.cn BT下载
*/    
public class SimpleMailSender  {    
/** *//**   
  * 以文本格式发送邮件   
  * @param mailInfo 待发送的邮件的信息   
  */    
    public boolean sendTextMail(MailSenderInfo mailInfo) {    
      // 判断是否需要身份认证    
      MyAuthenticator authenticator = null;    
      Properties pro = mailInfo.getProperties();   
      if (mailInfo.isValidate()) {    
      // 如果需要身份认证,则创建一个密码验证器    
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());    
      }   
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);    
      try {    
      // 根据session创建一个邮件消息    
      Message mailMessage = new MimeMessage(sendMailSession);    
      // 创建邮件发送者地址    
      Address from = new InternetAddress(mailInfo.getFromAddress());    
      // 设置邮件消息的发送者    
      mailMessage.setFrom(from);    
      // 创建邮件的接收者地址,并设置到邮件消息中    
      Address to = new InternetAddress(mailInfo.getToAddress());    
      mailMessage.setRecipient(Message.RecipientType.TO,to);    
      // 设置邮件消息的主题    
      mailMessage.setSubject(mailInfo.getSubject());    
      // 设置邮件消息发送的时间    
      mailMessage.setSentDate(new Date());    
      // 设置邮件消息的主要内容    
      String mailContent = mailInfo.getContent();    
      mailMessage.setText(mailContent);    
      // 发送邮件    
      Transport.send(mailMessage);   
      return true;    
      } catch (MessagingException ex) {    
          ex.printStackTrace();    
      }    
      return false;    
    }    
       
    /** *//**   
      * 以HTML格式发送邮件   
      * @param mailInfo 待发送的邮件信息   
      */    
    public static boolean sendHtmlMail(MailSenderInfo mailInfo){    
      // 判断是否需要身份认证    
      MyAuthenticator authenticator = null;   
      Properties pro = mailInfo.getProperties();   
      //如果需要身份认证,则创建一个密码验证器     
      if (mailInfo.isValidate()) {    
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());   
      }    
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);    
      try {    
      // 根据session创建一个邮件消息    
      Message mailMessage = new MimeMessage(sendMailSession);    
      // 创建邮件发送者地址    
      Address from = new InternetAddress(mailInfo.getFromAddress());    
      // 设置邮件消息的发送者    
      mailMessage.setFrom(from);    
      // 创建邮件的接收者地址,并设置到邮件消息中    
      Address to = new InternetAddress(mailInfo.getToAddress());    
      // Message.RecipientType.TO属性表示接收者的类型为TO    
      mailMessage.setRecipient(Message.RecipientType.TO,to);    
      // 设置邮件消息的主题    
      mailMessage.setSubject(mailInfo.getSubject());    
      // 设置邮件消息发送的时间    
      mailMessage.setSentDate(new Date());    
      // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象    
      Multipart mainPart = new MimeMultipart();    
      // 创建一个包含HTML内容的MimeBodyPart    
      BodyPart html = new MimeBodyPart();    
      // 设置HTML内容    
      html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");    
      mainPart.addBodyPart(html);    
      // 将MiniMultipart对象设置为邮件内容    
      mailMessage.setContent(mainPart);    
      // 发送邮件    
      Transport.send(mailMessage);    
      return true;    
      } catch (MessagingException ex) {    
          ex.printStackTrace();    
      }    
      return false;    
    }    
}   



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



Action调用

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/**
* 注册

* @return
* @throws DaoException 
* @throws ServiceException 
*/
public String register() throws DaoException, ServiceException {
System.out.println("ddd");
iEmaiService.processRegister(email.getEmail());
return null;
}
public String activate()throws DaoException, ServiceException {
try {
iEmaiService.processActivate(email.getEmail(), email.getValidateCode());
System.out.println("验证成功");
} catch (Exception e) {
System.out.println("验证失败");
}
return null;
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



EmailServiceImpl.java

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

@Override
public void processRegister(String email) throws DaoException {
Email em = new Email();
em.setEmail(email);
em.setRegisterTime(new Date());
em.setStatus(0);
em.setValidateCode(MD5Util.encode2hex(email));
saveEmail(em);
//发送邮件
SendUtil.sendInfo(email, em.getValidateCode());


}


/**
* 处理激活

* @param email
*            邮箱地址
* @param validateCode
*            验证码
* @throws ServiceException
*/
public void processActivate(String email, String validateCode)
throws DaoException {
List<Email> em = iEmailDao.findByEmmail(email);
//验证用户是否存在
if(em != null) {
//验证用户状态
if(em.get(0).getStatus() == 0) {
Date currentTime = new Date();
//验证链接是否过期
if(currentTime.before(em.get(0).getLastActivateTime())) {
//验证激活码是否正确
if(validateCode.equals(em.get(0).getValidateCode())) {
em.get(0).setStatus(1);
//激活成功,
iEmailDao.update(em.get(0));
} else {
System.out.println("激活码不正确");
}
} else {
System.out.println("激活码已过期!");
}
} else {
System.out.println("邮箱已激活,请登录!");
}
} else {
System.out.println("该邮箱未注册(邮箱地址不存在)!");
}
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



0 1
原创粉丝点击