前言
这是我第一篇文章,自建项目,自建架构是个漫长的过程,首先一个Javaweb项目必备的功能为注册登录,原计划使用短信接口进行发送验证码注册及登录。公司有封装高可用的短信接口,奈何奈何,公司架构代码无法上传至公共平台。而自建一个发送短信接口需要到中建信平台申请一个SMS许可码,并且引入包工具类过多,个人能力有限,或许后期可能会继续优化将短信接口完成。因此退而求其次,通过邮箱发送短信验证码,进行注册登录。此文章为邮件工具类的学习使用记录
代码模块
话不多说,先上代码
基于maven项目:首先引入必备的依赖包,此处文章使用的依赖包为:
javax.mail |
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mailapi</artifactId>
<version>1.4.3</version>
</dependency>
QQ邮箱区别于其他邮箱,使用QQ邮箱发送邮件时需优先至QQ邮箱中进行设置,路径为:
邮箱->设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
打开POP3/SMTP服务 获取对应password,使用qq邮箱发送所有密码皆为此时生成对应秘钥路径如下图:
这一步成功后,就可以放心大胆地撸代码了
具体代码块如下:仅供参考
import org.springframework.mail.SimpleMailMessage;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
/**
* 发送邮件工具类
*
* @author xujie
* @date 20210623
*/
public class SendMailUtils {
//邮箱注册地址,几乎所有邮箱都是stmp.邮箱后缀,具体使用时可自行查询
private static String HOST = "smtp.qq.com";
//发件人邮箱
private static String ACCOUNT = "********@qq.com";
//邮箱密码,QQ邮箱为上一步获取的对应秘钥,其他邮箱为邮箱对应密码
private static String PASSWORD = "*************";
/**
* @param toUser 发送邮件给谁
* @param title 邮件的标题
* @param emailMsg 邮件信息
*/
public static void sendMail(String toUser, String title, String emailMsg) throws MessagingException {
// 1.创建一个程序与邮件服务器会话对象 Session
Properties props = new Properties();
//设置发送的协议
props.setProperty("mail.transport.protocol", "SMTP");
//设置发送邮件的服务器
props.setProperty("mail.host", HOST);
// 指定验证为true
props.setProperty("mail.smtp.auth", "true");
// 创建验证器
Authenticator auth = new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
//设置发送人的帐号和密码 帐号 授权码
return new PasswordAuthentication(ACCOUNT, PASSWORD);
}
};
//会话
Session session = Session.getInstance(props, auth);
// 2.创建一个Message,它相当于是邮件内容
Message message = new MimeMessage(session);
//设置发送者
message.setFrom(new InternetAddress(ACCOUNT));
//设置发送方式与接收者
message.setRecipient(RecipientType.TO, new InternetAddress(toUser));
//设置邮件主题
message.setSubject(title);
//设置邮件内容
message.setContent(emailMsg, "text/html;charset=utf-8");
// 3.创建 Transport用于将邮件发送
Transport.send(message);
}
/**
*main犯法测试类,抛出对应异常
**/
public static void main(String[] args) throws AddressException, MessagingException {
SendMailUtils.sendMail("********@qq.com", "工具类测试邮件", "This is the first mail send by java. And the class write by xujie.");
}
}
待优化
此工具类亦存在待优化点,最主要的功能不完善并待优化的:只能简单发送文本文件,无法设置对应文件格式,等我后期有时间继续学习继续更新文档。