思路
先获取数据库中成员的邮箱,然后调用发送消息的方法。
好,那我们先获取数据库中的信息。
一、准备工作1:
数据库准备一张
导入mysql,lambok
的依赖
定义一个
定义一个配置文件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,完结撒花~