SSM-JavaMail实战-demo

最近花了整整一天的时间,重新搞了一遍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());
	}
}








猜你喜欢

转载自blog.csdn.net/m0_37499059/article/details/80099900