前言
假设数据库有一张表t_mail (id, from, to, subject, content), 里面存储着具体的邮件发件人、收件人、标题和内容。采用Druid连接池,读取id为1的记录,并基于Java Mail将该邮件发送出来。
使用步骤
1.从properties文件加载配置信息进行数据库连接
2.邮件的初始化
3.从数据库中获取发件人、收件人、标题和内容等信息,设置邮件
4.发送邮件
代码如下(示例):
package Works;
import DataBase.Mooc0704.DruidFactory2;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Properties;
/*
数据库有一张表t_mail (id, from, to, subject, content), 里面存储着具体的邮件发件人、收件人、标题和内容。
采用Druid连接池,读取id为1的记录,并基于Java Mail将该邮件发送出来。
*/
public class DruidMail {
public static void main(String[] args) throws Exception {
result();
}
/*
采用Druid连接池,读取id为1的记录
*/
public static void result() throws Exception {
//从properties文件获取配置信息
Properties properties = new Properties();
InputStream in = DruidFactory2.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(in); //加载所有K-V对
DruidDataSource dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from t_mail where id=1");
System.out.println("获取成功");
SendMail(resultSet);
resultSet.close();
statement.close();
connection.close();
}
/*
邮件初始化
*/
public static Transport init(String from) throws NoSuchProviderException {
String password = "wpdfwiwmkxqcbjfb";
String smtpServer = "smtp.qq.com";
Session session;
Transport transport;
//设置属性
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
props.put("mail.smtp.host", smtpServer); //设置发送邮件服务器
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true"); //SMTP服务器需要身份验证
System.out.println("初始化成功");
// 创建Session对象
session = Session.getInstance(props,new Authenticator(){ //验账账户
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, password);
}
});
System.out.println("账户验证成功");
System.out.println("输出跟踪日志:");
session.setDebug(true); //输出跟踪日志
// 创建Transport对象(发送协议类)
return transport = session.getTransport();
}
/*
从id为1的记录中,获取发件人、收件人、标题和内容,将邮件发送
*/
public static void SendMail(ResultSet rs) throws SQLException, MessagingException {
String from;
String to;
String subject;
String contnet;
Message message;
while (rs.next()){
System.out.println(rs.getInt(1)+","+rs.getString(2)+","+
rs.getString(3)+","+rs.getString(4)+","+ rs.getString(5));
from = rs.getString("from");
to = rs.getString("to");
subject = rs.getString("subject");
contnet = rs.getString("content");
Transport transport = init(from);
// 创建Session实例对象
Session session = Session.getDefaultInstance(new Properties());
// 创建MimeMessage实例对象
MimeMessage ms = new MimeMessage(session);
// 设置发件人
ms.setFrom(new InternetAddress(from));
// 设置收件人
ms.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// 设置发送日期
ms.setSentDate(new Date());
// 设置邮件主题
ms.setSubject(subject);
// 设置纯文本内容的邮件正文
ms.setText(contnet);
// 保存并生成最终的邮件内容
ms.saveChanges();
message = ms;
//发送邮件
transport.connect();
transport.sendMessage(message, message.getAllRecipients());
//打印结果
System.out.println(Thread.currentThread().getName()+"发送邮件成功");
transport.close();
}
}
}