假设数据库有一张表t_mail,里面存储着具体的邮件发件人、收件人、标题和内容。采用Druid连接池,读取id为1的记录,并基于Java Mail将该邮件发送出来

这是我这周学习MOOC上的一个作业;

做这个首先你要安装mysql,配置环境,和java配置环境差不多。下载安装可以参见下面链接,
https://blog.csdn.net/qq_45192089/article/details/105574316
安装Navicat,可参见下面链接:

这里是引用https://blog.csdn.net/weixin_30268071/article/details/101795522?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158682877519724811850012%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=158682877519724811850012&biz_id=0&utm_source=distribute.pc_search_result.none-task-blog-soetl_SOETLBAIDU-2

不安装Navicat也可,你在cmd里创建表或者mysql WorkBench里也可。

我是安装的Navicat,下面是安装成功之后进行连接mysql
在这里插入图片描述
然后下面是我进行测试的表,
在这里插入图片描述

下面是代码:
在这里插入图片描述

首先,这是程序的主程序

package zuoye;
/**
 * 
 * @author zrf
 *
 */
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DruidRead {
	public static void main(String[] args) {
		Connection conn = null;
		try {
			conn = DruidFactory.getConnection();
            System.out.println("连接池构建成功");
			// 构建数据库执行者
			Statement stmt = conn.createStatement();
			System.out.println("获取连接成功");

			// 执行SQL语句并返回结果
			ResultSet rs = stmt.executeQuery("select * from t_mail where id = 1");
			while (rs.next()) {
				System.out.println("获取数据成功");
				// 发送邮件
				MailSend ms = new MailSend(rs.getString("from"), rs.getString("to"), rs.getString("subject"),
						rs.getString("content"));
				ms.init();//初始化
				
				ms.sendMessage();//发送邮件
				
				ms.close();
			}
			rs.close();
			stmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != conn) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

Druid连接池,连接数据库,

package zuoye;

import java.sql.Connection;
import java.sql.SQLException;
import com.alibaba.druid.pool.DruidDataSource;
/**
 * 
 * @author zrf
 *
 */
public class DruidFactory {
	private static DruidDataSource dataSource = null;
	
	private static void init() {
		dataSource = new DruidDataSource();
		dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");//驱动,mysql是的话是旧版本是com.mysql.jdbc.Driver
		dataSource.setUsername("root");//写您自己的用户名
		dataSource.setPassword("123456");//这里是mysql的密码,测试的时候写您自己的密码
		//下面的test是我测试的时候用的数据库,您测试的时候改成您自己的数据库即可
		dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSLL=false&serverTimezone=UTC");//useSLL=false&serverTimezone=UTC这个依你自己版本,有的需要有的不需要
		dataSource.setInitialSize(5);
		dataSource.setMinIdle(1);
		dataSource.setMaxActive(10);
		
	}

	public static Connection getConnection() throws SQLException {
		if (dataSource == null) {
			init();
		}

		return dataSource.getConnection();
	}
}

发送邮件,

package zuoye;

import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
 * 
 * @author zrf
 *
 */
public class MailSend {
	private Session session;
	private Transport transport;
	private String from;
	private String to;
	private String subject;
	private String content;
	private String password = "";//这里是你自己的授权码
	private String smtpServer = "smtp.163.com";//这里注意不要有空格
	
	public MailSend(String from, String to, String subject, String content) {
		this.from = from;
		this.to = to;
		this.subject = subject;
		this.content = content;
	}
	public void init() throws NoSuchProviderException {
		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服务器需要身份验证
		
		//创建Session对象
		session = Session.getInstance(props,new Authenticator() {
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(from,password);
			}
		});
		session.setDebug(false);//输出跟踪日志
		
		//创建Transport对象
		transport = session.getTransport();
	}
	
	public void sendMessage() throws Exception {
		//创建一个邮件
		// 创建Session实例对象
		Session session = Session.getDefaultInstance(new Properties());
		// 创建MimeMessage实例对象
		MimeMessage message = new MimeMessage(session);
		// 设置发件人
		message.setFrom(new InternetAddress(from));
		// 设置收件人
		message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
		// 设置发送日期
		message.setSentDate(new Date());
		// 设置邮件主题
		message.setSubject(subject);
		// 设置纯文本内容的邮件正文
		message.setText(content);
		// 保存并生成最终的邮件内容
		message.saveChanges();

		
		//发送邮件
		transport.connect();
		transport.sendMessage(message, message.getAllRecipients());
		
		//打印结果
		System.out.println("发送邮件成功");
	}
	public void close()throws Exception
	  {
		transport.close();
	  }
}

注:代码参见了中国大学MOOC《Java核心技术(进阶)》课程;我只是记录一下自己的过程,勿喷!

发布了6 篇原创文章 · 获赞 14 · 访问量 114

猜你喜欢

转载自blog.csdn.net/qq_45192089/article/details/105609500