zoukankan      html  css  js  c++  java
  • java邮件发送(单人,多人,抄送,Excel附件)

      直接上代码保存吧

      

    package com.westvalley.ceiec.page.report.sendmail;
    
    import weaver.email.EmailEncoder;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.mail.util.ByteArrayDataSource;
    import javax.activation.*;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    import crivia.db.i.DataSet;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.InputStream;
    import java.util.*;
    
    /**邮件发送工具类
     * @author whh
     */
    public class Email {
        
        Log log = LogFactory.getLog(this.getClass());
        
        //发件人地址
        private String mail_from;
        public void setMail_from(String mailFrom) {
            mail_from = mailFrom;
        }
        public String getMail_from() {
            return mail_from;
        }
        
        //发件人密码
        private String password;
        public void setPassword(String password) {
            this.password = password;
        }
        public String getPassword() {
            return password;
        }
        
        //收件地址
        private String mail_to;
        public void setMail_to(String mailTo) {
            mail_to = mailTo;
        }
        public String getMail_to() {
            return mail_to;
        }
        
        //主题
        private String title;
        public void setTitle(String title) {
            this.title = title;
        }
        public String getTitle() {
            return title;
        }
        
        //内容
        private String message;
        public void setMessage(String message) {
            this.message = message;
        }
        public String getMessage() {
            return message;
        }
        
        //发件人邮件服务器 如:ceiec-electric.com 191.0.0.6
        private String send_server;
        public void setSend_server(String sendServer) {
            send_server = sendServer;
        }
        public String getSend_server() {
            return send_server;
        }
        
        /** 单个发送 setMail_to(String mailTo)
         * @return 是否正确发送
         * @throws AddressException
         */
        public boolean SendMail()throws AddressException{
            try{
                int n = this.mail_from.indexOf('@');
                int m = this.mail_from.length();
                //取邮件的服务器
                String server = this.mail_from.substring(n+1, m);
                //建立邮件会话
                Properties pro = new Properties();
                pro.put("mail.smtp.host", "smtp."+server);
                pro.put("mail.smtp.auth", "true");
                Session sess = Session.getInstance(pro);
                sess.setDebug(true);
                //新建一个消息对象
                MimeMessage message = new MimeMessage(sess);
                //设置发件人
                InternetAddress from_address = new InternetAddress(this.mail_from);
                message.setFrom(from_address);
                //设置收件人
                InternetAddress to_address = new InternetAddress(this.mail_to);
                message.setRecipient(Message.RecipientType.TO, to_address);
                //设置主题
                message.setSubject(title);
                //设置内容
                message.setContent(this.message, "text/html;charset=UTF-8");
                //设置发送时间
                message.setSentDate(new Date());
                //发送邮件
                message.saveChanges(); //保存邮件信息
                //设置发送的格式            
                Transport transport = sess.getTransport("smtp");
                if(this.send_server == null){
                    transport.connect("191.0.0.6", this.mail_from, password);
                }
                else{
                    transport.connect(this.send_server, this.mail_from, password);
                }
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
                log.info("向"+this.mail_to+"发送邮件成功");
                return true;
            }catch(Exception e){
                log.info("发送邮件失败,原因可能是"+e.toString());
                return false;
            }
            
        }
        
        /**群发 
         * @param addresses 地址list
         * @return 
         * @throws AddressException
         */
        public boolean SendMail(List<String> addresses) throws AddressException{
            try{
                int n = this.mail_from.indexOf('@');
                int m = this.mail_from.length();
                //取邮件的服务器
                String server = this.mail_from.substring(n+1, m);
                //建立邮件会话
                Properties pro = new Properties();
                pro.put("mail.smtp.host", "smtp."+server);
                pro.put("mail.smtp.auth", "true");
                Session sess = Session.getInstance(pro);
                sess.setDebug(true);
                //新建一个消息对象
                MimeMessage message = new MimeMessage(sess);
                //设置发件人
                InternetAddress from_address = new InternetAddress(this.mail_from);
                message.setFrom(from_address);
                //设置收件人,多个
                final int num = addresses.size();
                InternetAddress to_address[] = new InternetAddress[num];
                for(int i=0; i<num; i++){
                    to_address[i] = new InternetAddress(addresses.get(i));
                }
                message.setRecipients(Message.RecipientType.TO, to_address);
                //设置主题
                message.setSubject(title);
                //设置内容
                message.setContent(this.message, "text/html;charset=UTF-8");
                //设置发送时间
                message.setSentDate(new Date());
                //发送邮件
                message.saveChanges(); //保存邮件信息
                //设置发送的格式            
                Transport transport = sess.getTransport("smtp");
                if(this.send_server == null){
                    transport.connect("191.0.0.6", this.mail_from, password);
                }
                else{
                    transport.connect(this.send_server, this.mail_from, password);
                }
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
                log.info("发送邮件成功");
                return true;
            }catch(Exception e){
                log.info("发送邮件失败,原因可能是"+e.getMessage());
                return false;
            }
            
        }
        
        /** 多人发送并抄送 增加:2017-04-25 whh
         * @param addresses 收件邮箱(多个)
         * @param ccAddresses 抄送邮箱(多个)
         * @return
         * @throws AddressException
         */
        public boolean SendMail(List<String> addresses, List<String> ccAddresses) throws 
            AddressException{
            if(0==ccAddresses.size()){ //20170428 whh
                return SendMail(addresses);
            }
            try{
                int n = this.mail_from.indexOf('@');
                int m = this.mail_from.length();
                //取邮件的服务器
                String server = this.mail_from.substring(n+1, m);
                //建立邮件会话
                Properties pro = new Properties();
                pro.put("mail.smtp.host", "smtp."+server);
                pro.put("mail.smtp.auth", "true");
                Session sess = Session.getInstance(pro);
                sess.setDebug(true);
                //新建一个消息对象
                MimeMessage message = new MimeMessage(sess);
                //设置发件人
                InternetAddress from_address = new InternetAddress(this.mail_from);
                message.setFrom(from_address);
                //设置收件人,多个
                final int num = addresses.size();
                InternetAddress to_address[] = new InternetAddress[num];
                for(int i=0; i<num; i++){
                    to_address[i] = new InternetAddress(addresses.get(i));
                }
                message.setRecipients(Message.RecipientType.TO, to_address);
                //设置抄送人
                final int ccSize = ccAddresses.size();
                if(ccSize > 0){
                    InternetAddress cc_Address[] = new InternetAddress[ccSize];
                    for(int i=0; i<ccSize; i++){
                        cc_Address[i] = new InternetAddress(ccAddresses.get(i));
                    }
                    message.setRecipients(Message.RecipientType.CC, cc_Address);
                }    
                
                //设置主题
                message.setSubject(title);
                //设置内容
                message.setContent(this.message, "text/html;charset=UTF-8");
                //设置发送时间
                message.setSentDate(new Date());
                //发送邮件
                message.saveChanges(); //保存邮件信息
                //设置发送的格式            
                Transport transport = sess.getTransport("smtp");
                if(this.send_server == null){
                    transport.connect("191.0.0.6", this.mail_from, password);
                }
                else{
                    transport.connect(this.send_server, this.mail_from, password);
                }
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
                log.info("发送邮件成功");
                return true;
            }catch(Exception e){
                log.info("发送邮件失败,原因可能是"+e.getMessage());
                return false;
            }
            
        }
        
        /** 多人发送并抄送 增加:2019-06-14 whh
         * @param addresses 收件邮箱(多个)
         * @param ccAddresses 抄送邮箱(多个)
         * @param is 附件
         * @return
         * @throws AddressException
         */
        public boolean SendMail(List<String> addresses, List<String> ccAddresses,
                HSSFWorkbook workBook,String workBookName) throws 
            AddressException{
            try{
                int n = this.mail_from.indexOf('@');
                int m = this.mail_from.length();
                //取邮件的服务器
                String server = this.mail_from.substring(n+1, m);
                //建立邮件会话
                Properties pro = new Properties();
                pro.put("mail.smtp.host", "smtp."+server);
                pro.put("mail.smtp.auth", "true");
                Session sess = Session.getInstance(pro);
                sess.setDebug(true);
                //新建一个消息对象
                MimeMessage message = new MimeMessage(sess);
                //设置发件人
                InternetAddress from_address = new InternetAddress(this.mail_from);
                message.setFrom(from_address);
                //设置收件人,多个
                final int num = addresses.size();
                InternetAddress to_address[] = new InternetAddress[num];
                for(int i=0; i<num; i++){
                    to_address[i] = new InternetAddress(addresses.get(i));
                }
                message.setRecipients(Message.RecipientType.TO, to_address);
                //设置抄送人
                final int ccSize = ccAddresses.size();
                if(ccSize > 0){
                    InternetAddress cc_Address[] = new InternetAddress[ccSize];
                    for(int i=0; i<ccSize; i++){
                        cc_Address[i] = new InternetAddress(ccAddresses.get(i));
                    }
                    message.setRecipients(Message.RecipientType.CC, cc_Address);
                }    
                
                //附件
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                workBook.write(baos);
                baos.flush();
                byte[] bt = baos.toByteArray();
                InputStream is = new ByteArrayInputStream(bt, 0, bt.length);
                baos.close();
                
                /*添加正文内容*/  
                Multipart multipart = new MimeMultipart();  
                BodyPart contentPart = new MimeBodyPart();  
    //            contentPart.setText(this.message);  
    //            contentPart.setHeader("Content-Type", "text/html;charset=UTF-8"); 
                contentPart.setContent(this.message, "text/html;charset=UTF-8");
                multipart.addBodyPart(contentPart);  
                  
                /*添加附件*/  
                MimeBodyPart fileBody = new MimeBodyPart();  
                DataSource source = new ByteArrayDataSource(is, "application/msexcel"); 
                fileBody.setDataHandler(new DataHandler(source));  
                // 中文乱码问题
                fileBody.setFileName(MimeUtility.encodeText(workBookName+".xls"));  
                multipart.addBodyPart(fileBody);
                
                //设置主题
                message.setSubject(title);
                //设置内容
                message.setContent(multipart);
                //设置发送时间
                message.setSentDate(new Date());
                //发送邮件
                message.saveChanges(); //保存邮件信息
                //设置发送的格式            
                Transport transport = sess.getTransport("smtp");
                if(this.send_server == null){
                    transport.connect("191.0.0.6", this.mail_from, password);
                }
                else{
                    transport.connect(this.send_server, this.mail_from, password);
                }
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
                log.info("发送邮件成功");
                return true;
            }catch(Exception e){
                log.info("发送邮件失败,原因可能是"+e.getMessage());
                return false;
            }
            
        }
        
        /**邮箱初始化,发件人邮箱、密码及服务器信息的获取
         * @return 正确获取时返回Email对象,否则为null
         */
        public static Email intiEmail(){
    //        Log log = LogFactory.getLog(this.getClass());
            Email email = new Email();
            //获取系统的邮箱信息
            DataSet data = SQL.select(SQL.sql_Array(" select defmailpassword" +
                    ",defmailserver,defmailfrom from SystemSet "));
            if(data.next()){
                //发件人邮箱地址
                email.setMail_from(data.get("defmailfrom")); 
                //获取并解析邮箱密码
                email.setPassword(EmailEncoder.DecoderPassword(data.get("defmailpassword")));
    //            log.info("Password:"+EmailEncoder.DecoderPassword(data.get("defmailpassword")));
                //服务器信息
                email.setSend_server(data.get("defmailserver"));
            }
            if(email.getMail_from().equals("")||
                    email.getPassword().equals("")||
                    email.getSend_server().equals("")){
    //            log.info("发送人邮箱错误");
    //            log.info("From:"+email.getMail_from()+"Password:"+
    //                    email.getPassword()+"Server:"+email.getSend_server());    
                return null;
            }
            return email;
        }
    }
  • 相关阅读:
    Yeelink 初探
    Macbook被格式化之后
    linux 代码分析工具 gprof
    Writing Clean Code 读后感
    0 bug 读后感
    STM32 控制红外线收发
    HomeKit 与老旧设备
    树莓派控制红外线收发
    苹果没法删除部分照片的问题
    route处理
  • 原文地址:https://www.cnblogs.com/interesting-whh/p/11096959.html
Copyright © 2011-2022 走看看