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", "机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组", "什么是机器学习?"); } }