最近花了整整一天的时间,重新搞了一遍JavaMail,在我们Web项目中也是少不了这一功能的,为了激发你们的学习,先来看一下最终的效果,代码最后有链接!
项目目录结构:(ui是用h plus)
业务场景1:用户注册后通过点击邮件的链接进行激活
1.先注册一个用户
2.激活邮件
业务场景2:通过邮箱找回密码
那我们开始进入主题吧!!!!
1.应用场所
用户注册,通过邮件激活 过生日,网站发送邮件 网站优优惠活动,进行通知
2.邮件服务器协议(正常通信规定)
smtp(simple main transfer protocal ):源地址->目的地址,Tcp/Ip协议族,25 pop3(post office protocal):客户端去取邮件
3.邮件收发过程
[email protected]>客户端软件->163的smtp服务器->126d的smtp服务器
4.安装配置邮箱服务器
易邮邮箱服务器安装 Foxmail邮箱客户端软件(腾讯)本地进行测试要安装上面两个软件:(我给的代码文件中有)
数据库:(忘了给)
/* Navicat MySQL Data Transfer Source Server : 11 Source Server Version : 50559 Source Host : 60.205.212.196:3306 Source Database : javamail Target Server Type : MYSQL Target Server Version : 50559 File Encoding : 65001 Date: 2018-04-26 22:17:30 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) DEFAULT NULL, `password` varchar(20) DEFAULT NULL, `nickname` varchar(20) DEFAULT NULL, `email` varchar(30) DEFAULT NULL, `state` int(11) DEFAULT NULL, `code` varchar(64) DEFAULT NULL, PRIMARY KEY (`uid`) ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ----------------------------
5.开始编码了
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-io --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> <!-- javaMail --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.1</version> </dependency> <!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail --> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.4.4</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils --> <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.6</version> </dependency>
编写MailUtil工具类
package com.javamail.demo.utils; import javax.mail.*; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Date; import java.util.Properties; public final class MailUtil { // 邮件发送者地址 private static final String SenderEmailAddr = "[email protected]"; // 邮件发送者邮箱用户 private static final String SMTPUserName = "[email protected]"; // 邮件发送者邮箱密码 private static final String SMTPPassword = "你自己的,如果是QQ,要求qq邮箱上查看,并且要开启pop3服务"; // 邮件发送者邮箱SMTP服务器 private static final String SMTPServerName = "smtp.qq.com"; // 传输类型 private static final String TransportType = "smtp"; // 属性 private static Properties props; private MailUtil() {} /*静态构造器*/ static { MailUtil.props = new Properties(); // 存储发送邮件服务器的信息 MailUtil.props.put("mail.smtp.host", MailUtil.SMTPServerName); // 同时通过验证 MailUtil.props.put("mail.smtp.auth", "true"); MailUtil.props.put("mail.smtp.starttls.enable","true"); //开启Debug调试 MailUtil.props.setProperty("mail.debug","false"); } public static void activeUser(String to,String code) throws Exception { // 1.创建连接对象 Session session = Session.getDefaultInstance(new Properties(), new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]", "123456"); } }); // 2.创建邮件对象 Message message = new MimeMessage(session); message.setFrom(new InternetAddress("[email protected]")); message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); //主题 message.setSubject("欢迎你的注册"); //正文 message.setContent("<h1>来自星云系统的激活邮件,点击链接激活账号:</h1><h3><a href='http://localhost:8081/active?code="+code+"'>http://localhost:8081/active?code="+code+"</a></h3>", "text/html;charset=utf-8"); // 3.发送激活邮件 Transport.send(message); } /** * 发送邮件 * @param emailAddr:收信人邮件地址 * @param mailTitle:邮件标题 * @param mailConcept:邮件内容 */ public static void sendMail(String emailAddr, String mailTitle, String mailConcept) { // 根据属性新建一个邮件会话,null参数是一种Authenticator(验证程序) 对象 Session s = Session.getInstance(MailUtil.props, null); // 设置调试标志,要查看经过邮件服务器邮件命令,可以用该方法 s.setDebug(false); // 由邮件会话新建一个消息对象 Message message = new MimeMessage(s); try { // 设置发件人 Address from = new InternetAddress(MailUtil.SenderEmailAddr); message.setFrom(from); // 设置收件人 Address to = new InternetAddress(emailAddr); message.setRecipient(Message.RecipientType.TO, to); // 设置主题 message.setSubject(mailTitle); // 设置信件内容 message.setText(mailConcept); // 设置发信时间 message.setSentDate(new Date()); // 存储邮件信息 message.saveChanges(); Transport transport = s.getTransport(MailUtil.TransportType); // 要填入你的用户名和密码; transport.connect(MailUtil.SMTPServerName, MailUtil.SMTPUserName, MailUtil.SMTPPassword); // 发送邮件,其中第二个参数是所有已设好的收件人地址 transport.sendMessage(message, message.getAllRecipients()); transport.close(); System.out.println("发送邮件,邮件地址:" + emailAddr + " 标题:" + mailTitle + " 内容:" + mailConcept + "成功!"); } catch (Exception e) { System.out.println(e.getMessage()); System.out.println("发送邮件,邮件地址:" + emailAddr + " 标题:" + mailTitle + " 内容:" + mailConcept + "失败! 原因是" + e.getMessage()); } } }
写完自己可以写个main或test进行测试,然后在我们的web项目中去调用即可。
package com.javamail.demo.utils; public class Sendmail { private static final long serialVersionUID = 1L; public static void main(String[] args) { String text="消息发送!!!!"; MailUtil.sendMail("[email protected]", "来自某某网站",text); } }
项目源码下载:
**几个常用工具类:
package com.javamail.demo.utils; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * @Author: cxx * @Date: 2018/4/26 14:26 */ public class JDBCUtils { private static String url = "jdbc:mysql://60.205.212.196:3306/javamail"; private static String user = "root"; private static String passwd = "123456"; private static String driver = "com.mysql.jdbc.Driver"; public static ComboPooledDataSource getDataSource() throws Exception{ ComboPooledDataSource cpds = new ComboPooledDataSource(); cpds.setDriverClass( driver); cpds.setJdbcUrl( url ); cpds.setUser(user); cpds.setPassword(passwd); cpds.setMinPoolSize(5); cpds.setAcquireIncrement(5); cpds.setMaxPoolSize(30); cpds.setMaxIdleTime(60); return cpds; } }
package com.javamail.demo.utils; import java.util.Calendar; import java.util.Date; /** * @Author: cxx * @Date: 2018/4/26 17:06 */ public class TimeUtil { //5分钟 private static long time=1000*60*1; //判断url是否过期 public static boolean isExpired(Date startTime,Date endTime){ Calendar calendar = Calendar.getInstance(); calendar.setTime(startTime); long stime = calendar.getTimeInMillis(); System.out.println("发送邮件时间:"+startTime+":"+stime); calendar.setTime(endTime); long etime = calendar.getTimeInMillis(); System.out.println("验证邮件时间:"+endTime+":"+etime); return (etime-stime)<time?true:false; } }
/* ******************************************************************************* * @FileName UUIDUtil.java * @package com.jy.utils * @author jy·DT * @Date 2018年1月30日 上午2:03:35 * @description ******************************************************************************* */ package com.javamail.demo.utils; import java.util.UUID; /** * code生成工具 ****************************************** * @author jy·DT [2018年1月30日 上午2:03:35] ****************************************** */ public class UUIDUtil { public static String code(){ return UUID.randomUUID().toString().replace("-", ""); } public static void main(String[] args) { System.out.println(code()); } }