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

    }

} 
时间: 2024-10-10 18:15:21

爬虫获取邮箱,存入数据库,发送邮件java Mail的相关文章

将图片存入数据库【java实现】

import java.io.FileInputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class

基于java mail实现简单的QQ邮箱发送邮件

刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 SMTP 服务 完成验证 获取授权码(后面代码实现时使用) -----------------------------第二步 环境配置 即下载第三方库 https://github.com/javaee/javamail/releases -----------------------------第三步 代

java mail发送邮件

import java.io.UnsupportedEncodingException;import java.util.Date;import java.util.Properties; import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.NoSuchProviderException;import javax.mail.

Android Java Mail与Apache Mail发送邮件对比

原文链接: 一.邮件简介  一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等:  1.收件人:收件人的邮箱地址,例如[email protected]  2.收件人姓名:大部分的邮件显示时都会显示,例如loadfate [email protected]  3.发件人:发件人的邮箱地址  4.发件人姓名:  5.主题:邮件的标题  6.内容及附件:邮件的主要内容 二.使用Java发邮件的通用步骤  一般的项目中没有单独的邮件服务器,一般情况下都是使用别人的服务器.  1.设置

利用java mail发送邮件(转)

JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP.POP3.IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket),JavaMail也提供了能够创建出各种复杂MIME格式的邮件内容的API.使用JavaMail,我们可以实现类似OutLook.FoxMail的软件.虽然JavaMail(仅支持JDK4及以上)也是Java的API之一,但是却没有直接加入到JDK中,所以我们需要另行

简单的java mail发送邮件实例

mail.jar ,commons-email-X.X.jar ,activation.jar ,log4j.jar  这四个jar,放进项目里 下载地址 http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html 该类实现了较完整的邮件发送功能,包括以HTML格式发送,添加附件和抄送人.下面是具体的代码: 先写个简单的mail对象 packag

Java Mail 发送邮件(个人备份)

package net.guoguoda.admin.common.utils; import java.io.File; import java.io.UnsupportedEncodingException; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; i

Java mail发送邮件附件出现.eml文件夹

在使用JAVA MAIL发送邮件时,163邮箱和QQ邮箱收到PDF附件,格式错误如下图: 163邮箱: QQ邮箱: 经历了很长时间的研究和测试,错误原因为在邮件正文和邮件附件用的MimeBodyPart对象是同一个,进而导致上述现象,解决办法为正文是一个MimeBodyPart对象,一个附件是一个MimeBodyPart对象.正确代码如下: 原文地址:https://www.cnblogs.com/XH09/p/10981329.html

分析html格式数据,根据正则表达式获取所需数据,并存入数据库

例子为获取<dl>中的<dt></dt><dd></dd>中的内容,由于在<dt></dt>标签中还存在<a>标签,所有会一同举例说明.第一次做不够优化,共同学习. <!DOCTYPE html> <html> <head> <title><title> </head> <body> <dl class="hel