zoukankan      html  css  js  c++  java
  • 爬虫获取邮箱,存入数据库,发送邮件java Mail

    在网页上获取邮箱:

    package com.my.test;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.sql.Statement;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class GetMail {
        
          public static void main(String args[]){    
               
                String patternStr = "[\w[.-]]+@[\w[.-]]+\.[\w]+";
                String url = "http://www.sina.com.cn";
                GetContent(patternStr,url);
            }
    
    
        private static void GetContent(String patternStr,String urlPath) {
            URL url;
            int responsecode;
            HttpURLConnection urlConnection;
            BufferedReader reader;
            String line;
            
            Statement st = DbUtil.getConn();
            
            try{
                //生成一个URL对象,要获取源代码的网页地址为:http://www.sina.com.cn
                url=new URL(urlPath);
                //打开URL
                urlConnection = (HttpURLConnection)url.openConnection();
                //获取服务器响应代码
                responsecode=urlConnection.getResponseCode();
                if(responsecode==200){
                    //得到输入流,即获得了网页的内容 
                    reader=new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"UTF-8"));
                    while((line=reader.readLine())!=null){
                        
                         // 相当于埋好了陷阱匹配的地方就会掉下去  
                         Pattern pattern = Pattern.compile(patternStr);  
                         // 定义一个matcher用来做匹配  
                         Matcher matcher = pattern.matcher(line);  
                         // 如果找到了  
                        while (matcher.find()) {  
                           
                           st.executeUpdate("insert into email_from_web (email) values ('"+matcher.group()+"')");
                           System.out.println(matcher.group());
                       
                        }  
                    }
                }
                else{
                    System.out.println("获取不到网页的源码,服务器响应代码为:"+responsecode);
                }
            }
            catch(Exception e){
                System.out.println("获取不到网页的源码,出现异常:"+e);
            }finally {
                DbUtil.closeDb();
            }
        }
    
    }

    数据库Mysql相关代码:

    package com.my.test;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class DbUtil {
    
    
        private static String username = "root";
        
        private static String pwd = "123456";
        
        private static String url = "jdbc:mysql://127.0.0.1:3306/test";
        
        private static Connection conn = null;
        
        private static Statement st = null;
        
        private static ResultSet rs = null;
        
        static Statement getConn(){
            
            try {
                
                Class.forName("com.mysql.jdbc.Driver");
                
                conn = DriverManager.getConnection(url, username, pwd);
            
                st  = conn.createStatement();
                
            } catch (Exception e) {
                throw new RuntimeException();
            }
            return st;
        }
        
        
        static void closeDb(){
            try {
                if(rs!=null){
                    rs.close();
                }
                if(st!=null){
                    st.close();
                }
                if(conn!=null){
                    conn.close();
                }
            } catch (SQLException e) {
                System.out.println(e.getMessage());
                throw new RuntimeException();
            }
        }
        
    }

    发送邮件java maill 

    package com.my.test;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Address;
    import javax.mail.BodyPart;
    import javax.mail.Message;
    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 SendMail { 
    
        private MimeMessage mimeMsg; //MIME邮件对象 
        private Session session; //邮件会话对象 
        private Properties props; //系统属性 
        //smtp认证用户名和密码 
        private String username; 
        private String password; 
        private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象 
         
        /**
         * Constructor
         * @param smtp 邮件发送服务器
         */
        public SendMail(String smtp){ 
            setSmtpHost(smtp); 
            createMimeMessage(); 
        } 
    
        /**
         * 设置邮件发送服务器
         * @param hostName String 
         */
        public void setSmtpHost(String hostName) { 
            System.out.println("设置系统属性:mail.smtp.host = "+hostName); 
            if(props == null)
                props = System.getProperties(); //获得系统属性对象     
            props.put("mail.smtp.host",hostName); //设置SMTP主机 
        } 
    
    
        /**
         * 创建MIME邮件对象  
         * @return
         */
        public boolean createMimeMessage() 
        { 
            try { 
                System.out.println("准备获取邮件会话对象!"); 
                session = Session.getDefaultInstance(props,null); //获得邮件会话对象 
            } 
            catch(Exception e){ 
                System.err.println("获取邮件会话对象时发生错误!"+e); 
                return false; 
            } 
        
            System.out.println("准备创建MIME邮件对象!"); 
            try { 
                mimeMsg = new MimeMessage(session); //创建MIME邮件对象 
                mp = new MimeMultipart(); 
            
                return true; 
            } catch(Exception e){ 
                System.err.println("创建MIME邮件对象失败!"+e); 
                return false; 
            } 
        }     
        
        /**
         * 设置SMTP是否需要验证
         * @param need
         */
        public void setNeedAuth(boolean need) { 
            System.out.println("设置smtp身份认证:mail.smtp.auth = "+need); 
            if(props == null) props = System.getProperties(); 
            if(need){ 
                props.put("mail.smtp.auth","true"); 
            }else{ 
                props.put("mail.smtp.auth","false"); 
            } 
        } 
    
        /**
         * 设置用户名和密码
         * @param name
         * @param pass
         */
        public void setNamePass(String name,String pass) { 
            username = name; 
            password = pass; 
        } 
    
        /**
         * 设置邮件主题
         * @param mailSubject
         * @return
         */
        public boolean setSubject(String mailSubject) { 
            System.out.println("设置邮件主题!"); 
            try{ 
                mimeMsg.setSubject(mailSubject); 
                return true; 
            } 
            catch(Exception e) { 
                System.err.println("设置邮件主题发生错误!"); 
                return false; 
            } 
        }
        
        /** 
         * 设置邮件正文
         * @param mailBody String 
         */ 
        public boolean setBody(String mailBody) { 
            try{ 
                BodyPart bp = new MimeBodyPart(); 
                bp.setContent(""+mailBody,"text/html;charset=UTF-8"); 
                mp.addBodyPart(bp); 
            
                return true; 
            } catch(Exception e){ 
            System.err.println("设置邮件正文时发生错误!"+e); 
            return false; 
            } 
        } 
        /** 
         * 添加附件
         * @param filename String 
         */ 
        public boolean addFileAffix(String filename) { 
        
            System.out.println("增加邮件附件:"+filename); 
            try{ 
                BodyPart bp = new MimeBodyPart(); 
                FileDataSource fileds = new FileDataSource(filename); 
                bp.setDataHandler(new DataHandler(fileds)); 
                bp.setFileName(fileds.getName()); 
                
                mp.addBodyPart(bp); 
                
                return true; 
            } catch(Exception e){ 
                System.err.println("增加邮件附件:"+filename+"发生错误!"+e); 
                return false; 
            } 
        } 
        
        /** 
         * 设置发信人
         * @param from String 
         */ 
        public boolean setFrom(String from) { 
            System.out.println("设置发信人!"); 
            try{ 
                mimeMsg.setFrom(new InternetAddress(from)); //设置发信人 
                return true; 
            } catch(Exception e) { 
                return false; 
            } 
        } 
        /** 
         * 设置收信人
         * @param to String 
         */ 
        public boolean setTo(String to){ 
            if(to == null)return false; 
            try{ 
                mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); 
                return true; 
            } catch(Exception e) { 
                return false; 
            }     
        } 
        
        /** 
         * 设置抄送人
         * @param copyto String  
         */ 
        public boolean setCopyTo(String copyto) 
        { 
            if(copyto == null)return false; 
            try{ 
            mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto)); 
            return true; 
            } 
            catch(Exception e) 
            { return false; } 
        } 
        
        /** 
         * 发送邮件
         */ 
        public boolean sendOut() 
        { 
            try{ 
                mimeMsg.setContent(mp); 
                mimeMsg.saveChanges(); 
                System.out.println("正在发送邮件...."); 
                
                Session mailSession = Session.getInstance(props,null); 
                Transport transport = mailSession.getTransport("smtp"); 
                transport.connect((String)props.get("mail.smtp.host"),username,password); 
                transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO)); 
    
                if(mimeMsg.getRecipients(Message.RecipientType.CC)!=null){
                    transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC)); 
                }
                
                
                System.out.println("发送邮件成功!"); 
                transport.close(); 
                
                return true; 
            } catch(Exception e) { 
                System.err.println("邮件发送失败!"+e); 
                return false; 
            } 
        } 
    
        /**
         * 调用sendOut方法完成邮件发送
         * @param smtp
         * @param from
         * @param to
         * @param subject
         * @param content
         * @param username
         * @param password
         * @return boolean
         */
        public static boolean send(String smtp,String from,String to,String subject,String content,String username,String password) {
            SendMail theMail = new SendMail(smtp);
            theMail.setNeedAuth(true); //需要验证
            
            if(!theMail.setSubject(subject)) return false;
            if(!theMail.setBody(content)) return false;
            if(!theMail.setTo(to)) return false;
            if(!theMail.setFrom(from)) return false;
            theMail.setNamePass(username,password);
            
            if(!theMail.sendOut()) return false;
            return true;
        }
        
        /**
         * 调用sendOut方法完成邮件发送,带抄送
         * @param smtp
         * @param from
         * @param to
         * @param copyto
         * @param subject
         * @param content
         * @param username
         * @param password
         * @return boolean
         */
        public static boolean sendAndCc(String smtp,String from,String to,String copyto,String subject,String content,String username,String password) {
            SendMail theMail = new SendMail(smtp);
            theMail.setNeedAuth(true); //需要验证
            
            if(!theMail.setSubject(subject)) return false;
            if(!theMail.setBody(content)) return false;
            if(!theMail.setTo(to)) return false;
            if(!theMail.setCopyTo(copyto)) return false;
            if(!theMail.setFrom(from)) return false;
            theMail.setNamePass(username,password);
            
            if(!theMail.sendOut()) return false;
            return true;
        }
        
        /**
         * 调用sendOut方法完成邮件发送,带附件
         * @param smtp
         * @param from
         * @param to
         * @param subject
         * @param content
         * @param username
         * @param password
         * @param filename 附件路径
         * @return
         */
        public static boolean send(String smtp,String from,String to,String subject,String content,String username,String password,String filename) {
            SendMail theMail = new SendMail(smtp);
            theMail.setNeedAuth(true); //需要验证
            
            if(!theMail.setSubject(subject)) return false;
            if(!theMail.setBody(content)) return false;
            if(!theMail.addFileAffix(filename)) return false; 
            if(!theMail.setTo(to)) return false;
            if(!theMail.setFrom(from)) return false;
            theMail.setNamePass(username,password);
            
            if(!theMail.sendOut()) return false;
            return true;
        }
        
        /**
         * 调用sendOut方法完成邮件发送,带附件和抄送
         * @param smtp
         * @param from
         * @param to
         * @param copyto
         * @param subject
         * @param content
         * @param username
         * @param password
         * @param filename
         * @return
         */
        public static boolean sendAndCc(String smtp,String from,String to,String copyto,String subject,String content,String username,String password,String filename) {
            SendMail theMail = new SendMail(smtp);
            theMail.setNeedAuth(true); //需要验证
            
            if(!theMail.setSubject(subject)) return false;
            if(!theMail.setBody(content)) return false;
            if(!theMail.addFileAffix(filename)) return false; 
            if(!theMail.setTo(to)) return false;
            if(!theMail.setCopyTo(copyto)) return false;
            if(!theMail.setFrom(from)) return false;
            theMail.setNamePass(username,password);
            
            if(!theMail.sendOut()) return false;
            
            return true;
        }
        
        
        public static void main(String[] args) {
            
            String from = "**@qq.com";
            
            String to = "";
            
            String subject = "123";
            
            String content ="456"; 
            
            String username ="***@qq.com";
            
            String password = "***";
            
            String smtp =  "smtp." + username.split("@")[1];
            
            ResultSet rs = null;
            try {
                Statement st = DbUtil.getConn();
                rs = st.executeQuery("SELECT email from email_from_web");
                while (rs.next()) {
                    to = rs.getString("email");
                    send(smtp, from, to, subject, content, username, password);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                if(rs!=null){
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                DbUtil.closeDb();
            }
            
        }
        
        
    } 
  • 相关阅读:
    借用构造函数实现继承
    原型链
    创建对象 之 组合使用构造函数模式和原型模式
    6.原型对象的问题
    Spring MVC
    AOP
    谈谈对Spring IOC的理解
    Mybatis3.x与Spring4.x整合(转)
    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
    Appweb写法
  • 原文地址:https://www.cnblogs.com/liangblog/p/4673946.html
Copyright © 2011-2022 走看看