爬虫获取邮箱,存入数据库,发送邮件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();
        }
        
    }
    
    
}