使用java email过程中遇到的一些问题
配置
使用java email工具类时,首先要引入相关依赖:
配置MailUtil工具类
/**
* @author renyucheng
* @create 2021-10-19 14:09
*/
public class MailUtil {
//发件人邮箱、密码
public static String myEmailAccount = "发件人邮箱地址";
public static String myEmailPassword = "发件人邮箱密码";
//发件人SMTP地址 163通用SMTP地址为smtp.163.com
public static String myEmailSMTPHost = "smtp.163.com";
//收件人邮箱
public static String receiveEmailAccount = "收件人地址";
public static void main(String[] args) throws MessagingException, UnsupportedEncodingException {
//1.创建用于连接邮件服务器的参数配置
Properties props = new Properties(); // 参数配置
props.setProperty("mail.transport.protocol","smtp"); // 使用的协议(来自java email规范)
props.setProperty("mail.smtp.host",myEmailSMTPHost); // 发件人邮箱的smtp地址
props.setProperty("mail.smtp.auth","true"); // 需要请求认证
//2.创建验证器 网上很多攻略都漏了这一步,导致爆出535的授权码错误<br/>
//授权码是指网易邮箱SMTP协议中一种提供授权登录的16位编码<br/>
//可以用来代替密码访问邮箱,获取邮件发送权限等
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication("发件人邮箱地址","网易邮箱or其他邮箱的授权码");
}
};
//3.配置会话对象,用于和邮件服务器交互
Session session = Session.getInstance(props,auth);
session.setDebug(true); // 设为debug模式,可以看到详细的发送日志
//4.创建一封邮件
MimeMessage message = createMimeMessage(session,myEmailAccount,receiveEmailAccount);
//5.根据Session获取邮件传输对象
Transport transport = session.getTransport();
//6.使用邮箱账号密码连接邮件服务器
transport.connect(myEmailAccount,myEmailPassword);
//7.发送邮件,发到所有的地址,通过message.getAllRecipients()获取设置的所有收件人地址
transport.sendMessage(message,message.getAllRecipients());
//8.关闭连接
transport.close();
}
/**
* 邮件对象具体配置
* @param session
* @param sendMail
* @param receiveMail
* @return
*/
public static MimeMessage createMimeMessage(Session session,String sendMail,String receiveMail) throws UnsupportedEncodingException, MessagingException {
//1.创建邮件对象
MimeMessage message = new MimeMessage(session);
//2.From 发件人
message.setFrom(new InternetAddress(sendMail,"远古神魔","UTF-8"));
//3.抄送人
message.addRecipient(MimeMessage.RecipientType.TO,new InternetAddress(receiveMail,"测试邮件","UTF-8"));
//4.Subject: 邮件主题
message.setSubject("这是一封来自远古的邮件","UTF-8");
//5.content: 邮件内容
message.setContent("刮开领取上古神兽:<br> *********","text/html;charset=utf-8");
//......省略若干配置
//6.保存配置
message.saveChanges();
return message;
}
}
如此这般配置完毕,即可发送定义好的邮件内容啦,其他需要自定义的参考java email相关配置。
关于授权码配置
网易邮箱配置授权码的位置在这里:
开启最上面的两个服务,然后在授权码管理的位置配置授权码
注:配置授权码会提示发送短信,配置完成会生成授权码,注意截图或者拍照记下来授权码,不然忘了之后可能要重新获取授权码,让运营商白嫖可不好!!