EmailUtils和Base64编码解码


EmailUtils和Base64编码解码

记录一下学习写的邮件工具类和对明文进行base64编码解码的工具类,以便不时之需;

EmailUtils完整代码:

package com.gec.store.util;

import java.io.UnsupportedEncodingException;
import java.net.Inet4Address;
import java.net.UnknownHostException;
import java.security.GeneralSecurityException;
import java.util.Date;
import java.util.Properties;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

import com.sun.mail.util.MailSSLSocketFactory;
import com.gec.store.bean.User;

/**
 * @author: Lemon E-mail:1027880379@qq.com
 * @version:
 * @Since: Created in 2022年6月23日 上午10:32:56
 * @Description:
 */
public class EmailUtils {
	public static void sendEmail(User user) {
		// 1.设置服务器配置信息
		String account = "1027880379@qq.com";// 发送方
		String myPass = "kdonbobbxpkibehi";// 授权码
		Properties prop = new Properties();

		prop.setProperty("mail.transport.protocol", "smtp");// 设置邮件发送协议
		prop.setProperty("mail.host", "smtp.qq.com");// 设置邮件服务器
		prop.setProperty("mail.smtp.auth", "true"); // 是否开启smtp的认证功能
		prop.setProperty("mail.smtp.ssl.enable", "true");// 开启ssl加密服务功能

		try {
			// 可选,设置socket连接工厂
			MailSSLSocketFactory sf = new MailSSLSocketFactory();
			sf.setTrustAllHosts(true);// 设置服务器可信任机器
			prop.put("mail.smtp.ssl.socketFactory", sf);

			// 2.建立会话
			Session session = Session.getDefaultInstance(prop, new Authenticator() {
				// 进行与126/163/qq 的邮件服务器的连接
				@Override
				protected PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication(account, myPass);
				}
			});

			// 3.获取一个传输端口
			Transport transport = session.getTransport();

			// 4.传输端口与邮箱账户进行连接
			transport.connect(account, myPass);

			// 5.创建message对象
			MimeMessage message = createMsg(session, account, user);

			// 6.用传输端口发送邮件
			transport.sendMessage(message, message.getAllRecipients());

			// 7.关闭传输端口
			transport.close();
		} catch (MessagingException | GeneralSecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 创建message消息对象
	 * 
	 */
	private static MimeMessage createMsg(Session session, String account, User user) {
		MimeMessage message = new MimeMessage(session);

		try {
			// 设置发送方
			message.setFrom(new InternetAddress(account, "大新商城", "UTF-8"));
			// 设置接收方
			message.setRecipient(RecipientType.TO, new InternetAddress(user.getEmail(), user.getName(), "UTF-8"));
			// 设置邮件的主题
			message.setSubject("大新商城账号激活邮件", "UTF-8");
			// 设置本机IP和拼接url连接
			String hostAddress = Inet4Address.getLocalHost().getHostAddress();
			String url = "http://" + hostAddress + ":8080/user.do?method=active&c="
					+ Base64Utils.encode(user.getCode());// 出于安全,对code明文进行base64编码
			// 设置邮件内容
			message.setContent(user.getUsername() + ",你好!<br>欢迎注册大新商城!请点击连接进行激活:<a href='" + url + "'>点击此处</a>",
					"text/html;charset=utf-8");
			// 设置邮件发送时间,可选
			message.setSentDate(new Date());
			// 保存设置
			message.saveChanges();
		} catch (UnsupportedEncodingException | MessagingException | UnknownHostException e) {
			e.printStackTrace();
		}

		return message;
	}
}

Base64Utils完整代码:

package com.gec.store.util;

import java.util.Base64;

/**
 * @author: Lemon E-mail:1027880379@qq.com
 * @version:
 * @Since: Created in 2022年6月23日 上午11:59:18
 * @Description:
 */
public class Base64Utils {
	/**
	 * 编码
	 */
	public static String encode(String source) {
		return Base64.getEncoder().encodeToString(source.getBytes());
	}

	/**
	 * 解码
	 */
	public static String dencode(String source) {
		return new String(Base64.getDecoder().decode(source.getBytes()));
	}
}


这里补充一下网上看到的比较整洁的代码,也做一下记录,供参考学习:

/**
* @author Author:lhy
* @version created on :2019年12月18日 下午8:43:35
*/
package utils;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

import com.sun.mail.util.MailSSLSocketFactory;
 
public class EmailUtil {
	 
		private static String from = "xxxxx@qq.com"; // 发件人邮箱地址
		private static String user = "咕咕单车"; // 发件人称号
		private static String password = "你的stmp授权码"; // 发件人邮箱客户端授权码,不是邮箱密码!!!
		
		/* 发送邮件 */
		public static boolean sendMail(String to, String text, String title) {
			try { 
					MailSSLSocketFactory sf=new MailSSLSocketFactory();
					sf.setTrustAllHosts(true);
					
					//获取系统属性
				  	Properties properties = new Properties();
			        
				  	properties.put("mail.smtp.host", "smtp.qq.com");// 主机名
				  	properties.put("mail.smtp.port", "465");//使用465端口号
				  	properties.put("mail.smtp.auth", "true");//开启认证
				  	properties.put("mail.smtp.ssl.enable", "true");//允许使用ssl加密传输
				  	properties.put("mail.smtp.ssl.socketFactory", sf);
				  	properties.put("mail.debug", "true");// 显示debug信息
				  	
			        // 得到会话对象
			        Session session = Session.getInstance(properties);
			        // 获取邮件对象
			        Message message = new MimeMessage(session);
			        // 设置发件人邮箱地址
			        message.setFrom(new InternetAddress(from));
			        // 设置收件人邮箱地址,一次向多个邮箱发送
			        //message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("xxx@qq.com"),new InternetAddress("xxx@qq.com"),new InternetAddress("xxx@qq.com")});
			        // 设置收件人邮箱地址,一次向一个邮箱发送
			        message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//一个收件人
			        // 设置邮件标题
			        message.setSubject(title);
			        // 设置邮件内容
			        message.setText(text);
			        // 得到邮差对象
			        Transport transport = session.getTransport();
			        // 连接自己的邮箱账户
			        transport.connect(from, password);// 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
			        // 发送邮件
			        transport.sendMessage(message, message.getAllRecipients());
			        // 关闭资源
			        transport.close();
			        return true;
			}catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
				return false;
			}
		}
	 
		public static void main(String[] args) { // 做测试用
			sendMail("xxxxxx@qq.com", "机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组", "什么是机器学习?");
		}
}

原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/270248.html

(0)
上一篇 2022年6月24日
下一篇 2022年6月24日

相关推荐

发表回复

登录后才能评论