java mail 实现

我只是简单介绍,最主要的就是前三个类。网上找的发送邮件的专用类。

首先 需要引入mail.jar
http://download.csdn.net/detail/dbhunter/398258

MailSenderInfo.java

package com.util.mail;
/** 
* 发送邮件需要使用的基本信息 
*/ 
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; 
    } 
} 

MyAuthenticator.java

package com.util.mail;

import javax.mail.*;

/**
 *
 *  必须继承Authenticator
 *
 */
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);
    }
}

SimpleMailSender.java

package com.util.mail;

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; 

/** 
* 简单邮件(不带附件的邮件)发送器 
*/ 
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.getInstance(pro,authenticator);每次发生时获取一个新的session对象
      // Session.getDefaultInstance(pro,authenticator);先看之前有没有session对象,如果没有,就new一个;如果有,则直接使用之前那个
      Session sendMailSession = Session.getInstance(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; 
    } 
} 

SendEmailUtil.java (工具类)
由于当初写这个类是需要当程序抛出异常时,发送异常到指定邮箱
大家可以根据需求调用

package com.mail.sender;

import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Properties;

import org.apache.log4j.Logger;

import com.util.mail.MailSenderInfo;
import com.util.mail.SimpleMailSender;

/*
 * 发送邮件工具类
 */
public class SendEmailUtil {
    /*    private static final Logger LOGGER = Logger.getLogger(SendEmailUtil.class);
        private static String mailServerHost = "smtp.exmail.qq.com";
        private static String mailServerPort = "25";
        private static String username = "xxx@qq.com";
        private static String password = "password";    
        private static String fromAddress = "xxx@qq.com";
        private static String toAddress = "yyy@qq.com";*/
    private static final Logger LOGGER = Logger.getLogger(SendEmailUtil.class);
    private static String fileName = "/com/util/mail/mail.properties";

    public static void sendEmail(String content){

        Properties p = new Properties();
        try{
            InputStream in = SendEmailUtil.class.getResourceAsStream(fileName);
            p.load(in);
            MailSenderInfo mailInfo = new MailSenderInfo();
            mailInfo.setMailServerHost(p.getProperty("mailServerHost"));
            mailInfo.setMailServerPort(p.getProperty("mailServerPort"));
            mailInfo.setUserName(p.getProperty("username")); 
            mailInfo.setPassword(p.getProperty("password"));
            mailInfo.setFromAddress(p.getProperty("fromAddress"));
            mailInfo.setToAddress(p.getProperty("toAddress"));
            mailInfo.setValidate(true);
            mailInfo.setSubject(p.getProperty("subject"));   //邮件标题
            mailInfo.setContent(content);    //邮件内容 
            SimpleMailSender sms = new SimpleMailSender();
            boolean flag = false;  
            flag = sms.sendHtmlMail(mailInfo);
            if(flag)  
                System.out.println("发送Email 成功!");  
            in.close();
        }catch(Exception e){
            e.printStackTrace();
         }
    }

        public static void main(String[] args) {
            try{
                int i = 1/0;
            }catch(Exception e){
                String ExceptionInfo = getErrorInfoFromException(e);
                SendEmailUtil.sendEmail(ExceptionInfo);
                LOGGER.error("SendEmailUtil.Exception:"+e);
            }
        }
        /**
         * 将Exception转成String
         * @param e
         * @return
         */
         public static String getErrorInfoFromException(Exception e) {  
                try {  
                    StringWriter sw = new StringWriter();  //字符流
                    PrintWriter pw = new PrintWriter(sw);    
                    e.printStackTrace(pw);  
                    return "<table style=\"border:2px black solid;width:80%;border-collapse:collapse;\"><th style=\"border:2px black solid;height:30px;\">错误详情</th><tr><td style=\"font-size:16px;\">" + sw.toString() + "</td></tr></table>";  
                } catch (Exception e2) {  
                    return "fail in getErrorInfoFromException";  
                }  
            }  
    }


qq的mailServerHost是 smtp.qq.com(ps. exmail的是企业邮箱)
163: smtp.163.com

端口什么的都可以网上查
mail.properties

mailServerHost=smtp.exmail.qq.com
mailServerPort=25
username=xxx@qq.com
password=password
fromAddress=xxx@qq.com
toAddress=yyy@qq.com
subject=\u9519\u8BEF\u8BE6\u60C5\u90AE\u4EF6\u63A8\u900

记录也是为了今后的复习。
同时也希望对大家有所帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值