JAVA实现邮箱验证

本文详细介绍了如何通过MD5加密邮箱和激活码,并利用Java邮件发送类完成用户注册后的邮件激活操作,确保用户账户的安全性和唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先需要javax.mail的mail-1.4.7.jar

		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4.7</version>
		</dependency>
注册的业务

	public void processRegister(User model) {
		/// 如果处于安全,可以将激活码处理的更复杂点
		// user.setValidateCode(MD5Tool.MD5Encrypt(email));
		model.setValidateCode(MD5Util.encode2hex(model.getEmail()));
		// 保存注册信息
		userMapper.insert(model);
		/// 邮件的内容
		StringBuffer sb = new StringBuffer("点击下面链接激活账号,链接只能使用一次,请尽快激活!<br/>");
		sb.append("http://localhost:8080/registerValidate?email=");
		sb.append(model.getEmail());
		sb.append("&validateCode=");
		sb.append(model.getValidateCode());
		// 发送邮件
		SendEmail.send(model.getEmail(), sb.toString());
	}
传入的model是经过前台验证的实体

MD5Util类

public class MD5Util {
	/**
	 * 将源字符串使用MD5加密为字节数组
	 */
	public static byte[] encode2bytes(String source) {
		byte[] result = null;
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.reset();
			md.update(source.getBytes("UTF-8"));
			result = md.digest();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 将源字符串使用MD5加密为32位16进制数
	 */
	public static String encode2hex(String source) {
		byte[] data = encode2bytes(source);
		StringBuffer hexString = new StringBuffer();
		for (int i = 0; i < data.length; i++) {
			String hex = Integer.toHexString(0xff & data[i]);
			if (hex.length() == 1) {
				hexString.append('0');
			}
			hexString.append(hex);
		}
		return hexString.toString();
	}

	/**
	 * 验证字符串是否匹配
	 * 
	 * @param unknown
	 *            待验证的字符串
	 * @param okHex
	 *            使用MD5加密过的16进制字符串
	 * @return 匹配返回true,不匹配返回false
	 */
	public static boolean validate(String unknown, String okHex) {
		return okHex.equals(encode2hex(unknown));
	}
}
SendEmail类

public class SendEmail {
	public static final String HOST = "smtp.163.com";
	public static final String PROTOCOL = "smtp";
	public static final int PORT = 25;
	public static final String FROM = "xxxxxxxxxx@163.com";// 发件人的email
	public static final String PWD = "xxxxxxxx";// 发件人密码

	/**
	 * 获取Session
	 */
	private static Session getSession() {
		Properties props = new Properties();
		props.put("mail.smtp.host", HOST);// 设置服务器地址
		props.put("mail.store.protocol", PROTOCOL);// 设置协议
		props.put("mail.smtp.port", PORT);// 设置端口
		props.put("mail.smtp.auth", true);
		Authenticator authenticator = new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(FROM, PWD);
			}
		};
		Session session = Session.getDefaultInstance(props, authenticator);
		return session;
	}

	public static void send(String toEmail, String content) {
		Session session = getSession();
		try {
			// Instantiate a message
			Message msg = new MimeMessage(session);

			// Set message attributes
			msg.setFrom(new InternetAddress(FROM));
			InternetAddress[] address = { new InternetAddress(toEmail) };
			msg.setRecipients(Message.RecipientType.TO, address);
			msg.setSubject("账号激活邮件");
			msg.setSentDate(new Date());
			msg.setContent(content, "text/html;charset=utf-8");

			// Send the message
			Transport.send(msg);
		} catch (MessagingException mex) {
			mex.printStackTrace();
		}
	}
}
以163邮箱为例

ServiceException类

public class ServiceException extends Exception {
	private static final long serialVersionUID = -1708015121235851228L;

	public ServiceException(String message) {
		super(message);
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值