javaemail功能齐全的发送邮件类【能上传附件哦】

本文深入探讨了音视频直播流媒体领域的关键技术,包括流媒体协议、WebRTC直播视频会议、流媒体直播转发服务器、P2P点对点直播等,提供了全面的技术解析和应用场景分析。

从网上找了一个些资料,再原本的基础上增加的发送附件功能,附件上传的最大容量 默认20M

需要导入一个包mail.jar,随便下一个吧

package common; 
/** 
* 发送邮件需要使用的基本信息 
*/  
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;  
public class MailSenderInfo {  
    // 发送邮件的服务器的IP和端口  
    private String mailServerHost;  
    private String mailServerPort = "25";  
    // 邮件发送者的地址  
    private String fromAddress;  
    // 邮件接收者的地址  
    //private String toAddress;
    private List<String> toAddress;
    // 邮件抄送者的地址
    private List<String> ccAddress;
    // 邮件暗送者的地址
    private List<String> bccAddress;
    // 登陆邮件发送服务器的用户名和密码  
    private String userName;  
    private String password;  
    // 是否需要身份验证  
    private boolean validate = true;  
    // 邮件主题  
    private String subject;  
    // 邮件的文本内容  
    private String content;  
    // 邮件附件的文件名  
    private String[] attachFileNames;
    //邮件附件路径
    private List<String> filePaths;
    //是否打印邮件发送调试信息
    private boolean debug;
    //附件上传的最大容量 默认20M
    public static final long fileMaxSize = 20971520;
   
    public MailSenderInfo(){
     this.debug = false;
     this.toAddress = new ArrayList<String>();//收件人邮箱
     this.ccAddress = new ArrayList<String>();//抄送人邮箱
     this.bccAddress = new ArrayList<String>();//暗送人邮箱
     this.filePaths =new ArrayList<String>();//附件
    }
    /** 
      * 获得邮件会话属性 
      */  
    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 getToAddress() {  
//     return this.toAddress;  
// }  
// public void setToAddress(String toAddress) {  
//     this.toAddress = toAddress;  
// } 
    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 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;  
    }
 public List<String> getToAddress() {
  return toAddress;
 }
 public void setToAddress(List<String> toAddress) {
  this.toAddress = toAddress;
 }
 public List<String> getCcAddress() {
  return ccAddress;
 }
 public void setCcAddress(List<String> ccAddress) {
  this.ccAddress = ccAddress;
 }
 public List<String> getBccAddress() {
  return bccAddress;
 }
 public void setBccAddress(List<String> bccAddress) {
  this.bccAddress = bccAddress;
 }  
 public void addToAddress(String mailAddress) {
        this.toAddress.add(mailAddress);
    }
    public void addCcAddress(String mailAddress) {
        this.ccAddress.add(mailAddress);
    }
    public void addBccAddress(String mailAddress) {
        this.bccAddress.add(mailAddress);
    }
 public boolean isDebug() {
  return debug;
 }
 public void setDebug(boolean debug) {
  this.debug = debug;
 }
 public List<String> getFilePaths() {
  return filePaths;
 }
 public void setFilePaths(List<String> filePaths) {
  this.filePaths = filePaths;
 }
 public void addAttachment(String filePath) {
        this.filePaths.add(filePath);
    }
}  

 

package common; 
 
import java.io.File;
import java.util.ArrayList;
import java.util.Date;  
import java.util.List;
import java.util.Properties; 

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;  
import javax.mail.Authenticator;
import javax.mail.BodyPart;  
import javax.mail.Message;  
import javax.mail.MessagingException;  
import javax.mail.Multipart;  
import javax.mail.PasswordAuthentication;
import javax.mail.Session;  
import javax.mail.Transport;  
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.MimeBodyPart;  
import javax.mail.internet.MimeMessage;  
import javax.mail.internet.MimeMultipart;  
import javax.mail.internet.MimeUtility;

/** 
* 邮件发送器 
*/  
public class MailSender  { 
 
   //验证邮件对象
   private 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); 
     } 
 }
 
 /** 
   * 以文本格式发送邮件 
   * @param mailInfo 待发送的邮件的信息 
   */  
    public static boolean sendTextMail(MailSenderInfo mailInfo) {  
      // 判断是否需要身份认证  
      MyAuthenticator authenticator = null;  
      Properties pro = mailInfo.getProperties(); 
      if (mailInfo.isValidate()) {  
      // 如果需要身份认证,则创建一个密码验证器  
        authenticator = (new MailSender()).new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());  
      } 
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session  
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
      //是否打印邮件会话调试信息
      sendMailSession.setDebug(mailInfo.isDebug());
      try {  
      // 根据session创建一个邮件消息  
      Message mailMessage = new MimeMessage(sendMailSession);  
      // 创建邮件发送者地址  
      Address from = new InternetAddress(mailInfo.getFromAddress());  
      // 设置邮件消息的发送者  
      mailMessage.setFrom(from);  
      // 创建邮件的接收者地址,并设置到邮件消息中  
      //Address to = new InternetAddress(mailInfo.getToAddress());  
      Address[] tos = getAddress(mailInfo.getToAddress());
      //mailMessage.setRecipient(Message.RecipientType.TO,to);//设置单个收件人
      mailMessage.setRecipients(Message.RecipientType.TO,tos);//设置多个收件人
      //创建邮件的抄送者地址,并设置到邮件消息中
      Address[] ccs = getAddress(mailInfo.getCcAddress());
      mailMessage.setRecipients(Message.RecipientType.CC,ccs);
      //创建邮件的暗送者地址,并设置到邮件消息中
      Address[] bccs = getAddress(mailInfo.getBccAddress());
      mailMessage.setRecipients(Message.RecipientType.BCC,bccs);
      // 设置邮件消息的主题  
      mailMessage.setSubject(mailInfo.getSubject());  
      // 设置邮件消息发送的时间  
      mailMessage.setSentDate(new Date());
      // 设置邮件消息的主要内容  
      //String mailContent = mailInfo.getContent();  
      //mailMessage.setText(mailContent);
      // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
      Multipart mainPart = new MimeMultipart();        
      //设置邮件的文本内容
      BodyPart contentPart = new MimeBodyPart();
      contentPart.setText(mailInfo.getContent());
      mainPart.addBodyPart(contentPart);
      // 添加附件
      if(!addFileAffix(mailMessage,mainPart,mailInfo.getFilePaths())){
       System.out.println("邮件发送失败!");
       return false;
      }
      //将multipart对象放到message中
      mailMessage.setContent(mainPart);
      // 发送邮件  
      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 MailSender()).new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); 
      }  
      // 根据邮件会话属性和密码验证器构造一个发送邮件的session  
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
      //是否打印邮件会话调试信息
      sendMailSession.setDebug(mailInfo.isDebug());
      try {  
       // 根据session创建一个邮件消息  
       Message mailMessage = new MimeMessage(sendMailSession);  
       // 创建邮件发送者地址  
       Address from = new InternetAddress(mailInfo.getFromAddress());  
       // 设置邮件消息的发送者  
       mailMessage.setFrom(from); 
       // 创建邮件的接收者地址,并设置到邮件消息中
       Address[] tos = getAddress(mailInfo.getToAddress());
       // Message.RecipientType.TO属性表示接收者的类型为TO  
       //mailMessage.setRecipient(Message.RecipientType.TO,to);
       mailMessage.setRecipients(Message.RecipientType.TO,tos);
       //创建邮件的抄送者地址,并设置到邮件消息中
       Address[] ccs = getAddress(mailInfo.getCcAddress());
       mailMessage.setRecipients(Message.RecipientType.CC,ccs);
       //创建邮件的暗送者地址,并设置到邮件消息中
       Address[] bccs = getAddress(mailInfo.getBccAddress());
       mailMessage.setRecipients(Message.RecipientType.BCC,bccs);
       // 设置邮件消息的主题  
       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); 
       // 添加附件
       if(!addFileAffix(mailMessage,mainPart,mailInfo.getFilePaths())){
        System.out.println("邮件发送失败!");
        return false;
       }
       // 发送邮件  
       Transport.send(mailMessage);  
       return true;  
      } catch (Exception ex) {  
          ex.printStackTrace();  
      }  
      return false;  
    }
   
    /**
     * 创建邮件的接收者地址
     * @author sd(chenfang)
     * @returnType Address[] 收件人邮箱地址
     * @param toAddress 收件人邮箱地址
     * @throws Exception
     */
    private static Address[] getAddress(List<String> toAddress){  
       List<Address> to = new ArrayList<Address>();
       try {
        for (int i=0; toAddress !=null && i<toAddress.size();i++) {
    String toMail =  toAddress.get(i);//获取收件人邮箱地址
    if(toMail !=null && !"".equals(toMail)){
     to.add(new InternetAddress(toMail));//创建接收者地址
    }
     }
       } catch (AddressException e) {
    e.printStackTrace();
    }finally{
     return (Address[])to.toArray(new Address[to.size()]);
    }
    }
   
    /** 
     * 增加发送附件  
     * @param filenames 附件绝对路径集
     * @return 
     */ 
    private static boolean addFileAffix(Message mailMessage,Multipart mainPart,List<String> filenames) {  
        boolean flavg=true;
     for (int i = 0; filenames !=null && i < filenames.size(); i ++) {
         String filename=filenames.get(i);
         if(filename != null && !"".equals(filename)){
          flavg = addFileAffix(mailMessage,mainPart,filename);
          if(!flavg){break;}
         }
  }
     return flavg;  
    }
   
    /** 
     * 增加发送附件  
     * @param filename 附件绝对路径
     * @return 
     */ 
    private static boolean addFileAffix(Message mailMessage,Multipart mainPart,String filePath) {  
        System.out.println("增加邮件附件:" + filePath);  
        try {  
           //添加附件
       BodyPart messageBodyPart = new MimeBodyPart();
       File file = new File(filePath);
       if(file !=null && file.length() > MailSenderInfo.fileMaxSize){
         System.err.println("邮件附件名字为" + file.getName() + "的文件大小超出允许容量范围[最大附件文件大小为"+ Constant.MAIL_FILE_SIZE +"B]");
         return false;
       }else if(file !=null){
        DataSource source = new FileDataSource(file);
        //添加附件的内容
        messageBodyPart.setDataHandler(new DataHandler(source));
        //设置附件的名字(可以防止邮件自动打开文件)
        String filename=file.getName();
        //附件名字转码
        //第一种方式 BASE64Encoder encode 转码
        //这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
            //sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
            //messageBodyPart.setFileName("=?GBK?B?"+enc.encode(filename.getBytes())+"?=");
        //第二中方式 MimeUtility encodeText 转码
        messageBodyPart.setFileName(MimeUtility.encodeText(filename));
        //添加附件
        mainPart.addBodyPart(messageBodyPart);
        //将multipart对象放到message中
        mailMessage.setContent(mainPart, "file");
        //保存邮件
            // message.saveChanges();
       }
        } catch (Exception e) {  
           System.err.println("增加邮件附件:" + filePath + "发生错误!" + e);  
           return false;  
        }  
        System.out.println("增加邮件附件成功!" );  
        return true;  
    }
   
    /**
     * 群发邮件信息[收件人多个] 以HTML格式发送
     * @author sd(chenfang)
     * @dateTime 2012-7-10上午11:13:14
     * @returnType void
     * @param toMail -收件人地址[至少一个,否则发送失败抛异常]
     * @param ccMail -抄送人地址
     * @param bccMail -暗送人地址
     * @param subject -邮件主题
     * @param content -邮件内容
     * @param filePaths -邮件附件
     */
    public static void batchSendMails(List<String> toMail,List<String> ccMail,List<String> bccMail,String subject,String content,List<String> filePaths)throws Exception{
     try{
            MailSenderInfo mail = new MailSenderInfo();
            mail.setMailServerHost("smtp.163.com"); // 邮件服务器地址
            mail.setUserName("ichenfang163@hotmail.com"); // 用户名
            mail.setPassword("**********"); // 密码
            mail.setFromAddress(ichenfang163@hotmail.com); // 发件人邮箱
            /**设置收件人邮箱**/
            mail.setToAddress(toMail);
            /**设置抄送人邮箱**/
            mail.setCcAddress(ccMail);
            /**设置暗送人邮箱**/
            mail.setBccAddress(bccMail);
            /**邮件主题**/
            mail.setSubject(subject);
            /**邮件内容**/
            mail.setContent(content);
            /**设置邮件附件**/
            mail.setFilePaths(filePaths);
           
            MailSender.sendHtmlMail(mail);//发送HTML
     }catch (Exception e) {
      e.printStackTrace();
      throw new Exception("Exception:"+e.getMessage());
     }
    }
   
   
    public static void main(String[] args){ 
        //这个类主要是设置邮件 
      MailSenderInfo mailInfo = new MailSenderInfo();  
      mailInfo.setMailServerHost("smtp.163.com");   //主机
      //mailInfo.setMailServerPort("25");   //端口
      mailInfo.setValidate(true);   //登陆是否验证
      mailInfo.setUserName(“ichenfang163@hotmail.com”);   //用户名
      mailInfo.setPassword(“*********”);//密码  
      mailInfo.setFromAddress(“”); //发件人邮箱
      mailInfo.addToAddress("ichenfang163@163.com");//收件人邮箱1
      mailInfo.addToAddress("ichenfang163@126.com");//收件人邮箱2
      mailInfo.addCcAddress("tage_cf@hotmail.com");//抄送人邮箱1
      mailInfo.addCcAddress("sunnyboyfang@hotmail.com");//抄送人邮箱2
      mailInfo.addBccAddress("ichenfang163@hotmail.com");//暗送人邮箱1
      mailInfo.addBccAddress("sunsideboy@hotmail.com");//暗送人邮箱2
     
      mailInfo.setSubject("设置邮箱主题");   //邮件主题
      mailInfo.setContent("<b>设置邮箱内容</b> <br> http://www.baidu.com");//内容
      //mailInfo.addAttachment("C:/Users/sd/Desktop/工具.xlsx"); //附件1
      //mailInfo.addAttachment("C:/Users/sd/Desktop/带附件的邮件发送.doc"); //附件2
      mailInfo.setFilePaths(null);
      System.out.println("邮件发送开始!"+(new Date().toLocaleString()));
      //这个类主要来发送邮件 
      //MailSender sms = new MailSender(); 
        // System.out.println("邮件发送成功是否!"+MailSender.sendTextMail(mailInfo));//发送文体格式  
         System.out.println("邮件发送成功是否!"+MailSender.sendHtmlMail(mailInfo));//发送html格式 

         System.out.println("邮件发送结束!"+(new Date().toLocaleString()));
   }
   
}

 

 

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值