java实现向数据库中成员发送qq邮箱消息(maven项目+jdbc)

思路

先获取数据库中成员的邮箱,然后调用发送消息的方法。


好,那我们先获取数据库中的信息。
一、准备工作1:

数据库准备一张email
导入mysql,lambok的依赖
定义一个email实体类
定义一个配置文件db.properties:用来设置数据库相关的信息
定义一个JDBCUtil类:用来连接数据库
定义一个EmailDao接口用来处理业务
定义一个EmailDaoImpl类用来实现EmailDao接口
定义一个主启动类EmailMain


1、数据库准备一张email表,表设计如下:

在这里插入图片描述2、导入mysql的依赖

		<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>

3、定义一个email实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Email {

    private int id;
    private String name;
    private String qq;
}

4、定义一个配置文件db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/xxxxxx?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
username=root
password=123456

5、定义一个JDBCUtil类:用来连接数据库

public class JDBCUtil {

    private static String MYSQL_DRIVER = "";
    private static String MYSQL_USERNAME = "";
    private static String MYSQL_PASSWORD = "";
    private static String MYSQL_URL = "";
    static {
        InputStream resource = JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties");
        Properties properties = new Properties();
        try {
            properties.load(resource);
            MYSQL_DRIVER = properties.getProperty("driver");
            MYSQL_URL = properties.getProperty("url");
            MYSQL_USERNAME = properties.getProperty("username");
            MYSQL_PASSWORD = properties.getProperty("password");

//            System.out.println(MYSQL_DRIVER+"--"+MYSQL_URL+"--"+MYSQL_USERNAME+"--"+MYSQL_PASSWORD);
            Class.forName(MYSQL_DRIVER);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(MYSQL_URL,MYSQL_USERNAME,MYSQL_PASSWORD);
    }

    public static void close(ResultSet rs, PreparedStatement ptmt,Connection con){

        try {
            if(null!=rs){
                rs.close();
            }
            if(null!=ptmt){
                ptmt.close();
            }
            if(null!=con){
                con.close();
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
    }
}

6、定义一个EmailDao接口用来处理业务

public interface IEmailDao {
    public List<Email> findAll();
}

7、定义一个EmailDaoImpl类用来处理业务

public class EmailDaoImpl implements IEmailDao {
    @Override
    public List<Email> findAll() {
        List<Email> list = new ArrayList<>();
        try {
            Connection connection = JDBCUtil.getConnection();
            String sql = "SELECT * FROM email";
            PreparedStatement ps = connection.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()){
                Email email = new Email();
                email.setId(rs.getInt("id"));
                email.setName(rs.getString("name"));
                email.setQq(rs.getString("qq"));
                list.add(email);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
}

8、定义一个主启动类EmailMain

public class EmailMain {
    public static void main(String[] args) throws MessagingException {
        IEmailDao emailDao = new EmailDaoImpl();
        List<Email> list = emailDao.findAll();
        //输出结果
        System.out.println(list);
    }
}

那好,以上都做好了,咱们启动打印看一下结果

在这里插入图片描述ok,完成了!


那么现在我们该去调用发送邮件的方法
参考文章:java实现发送QQ邮箱

二、准备工作2

导入email依赖
定义一个send类


1、导入email依赖

		<dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>

2、定义一个send类

public class Send {

    /**
     * @param addressee 收件人
     * @param title 标题
     * @param allMessage 信息
     */
    public void sendMessage(String addressee,String title,String allMessage) throws MessagingException {
        // 创建Properties 类用于记录邮箱的一些属性
        Properties props = new Properties();
        // 表示SMTP发送邮件,必须进行身份验证
        props.put("mail.smtp.auth", "true");
        //此处填写SMTP服务器
        props.put("mail.smtp.host", "smtp.qq.com");
        //端口号,QQ邮箱端口587
        props.put("mail.smtp.port", "587");
        // 此处填写,写信人的账号
        props.put("mail.user", "xxx@qq.com");
        // 此处填写16位STMP口令
        props.put("mail.password", "xxx");

        // 构建授权信息,用于进行SMTP进行身份验证
        Authenticator authenticator = new Authenticator() {

            protected PasswordAuthentication getPasswordAuthentication() {
                // 用户名、密码
                String userName = props.getProperty("mail.user");
                String password = props.getProperty("mail.password");
                return new PasswordAuthentication(userName, password);
            }
        };
        // 使用环境属性和授权信息,创建邮件会话
        Session mailSession = Session.getInstance(props, authenticator);
        // 创建邮件消息
        MimeMessage message = new MimeMessage(mailSession);
        // 设置发件人
        InternetAddress form = new InternetAddress(props.getProperty("mail.user"));
        message.setFrom(form);

        // 设置收件人的邮箱
        InternetAddress to = new InternetAddress(addressee);
        message.setRecipient(MimeMessage.RecipientType.TO, to);

        // 设置邮件标题
        message.setSubject(title);

        // 设置邮件的内容体
        message.setContent(allMessage, "text/html;charset=UTF-8");

        // 最后当然就是发送邮件啦
        Transport.send(message);
    }
}

最后在启动类中调用send类方法

public class EmailMain {
    public static void main(String[] args) throws MessagingException {
        IEmailDao emailDao = new EmailDaoImpl();
        List<Email> list = emailDao.findAll();
        System.out.println(list);

        String title = "测试";
        String allMessage = "我来了!!!";

        Send send = new Send();

        for (Email obj:list){
            send.sendMessage(obj.getQq(),title,allMessage);
        }
    }
}

运行主类EmailMain,去QQ邮箱查看结果

在这里插入图片描述ok,完结撒花~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值