把需要的参数填写进去就可了,发送的HTML格式的内容
邮件实体类
import lombok.Data;
@Data
public class MailInfo {
public static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
// SMTP服务器地址
private String smtpServer;
private String port; // 端口
private String fromUserName;
private String fromUserPassword;//密码/授权码
// 登录SMTP服务器的密码
private String toUser; // 收件人
private String subject; // 邮件主题
private String content; // 邮件正文
public MailInfo() {
}
public MailInfo(String toUser, String content) {
this.toUser = toUser;
this.content = content;
}
}
package com.x.bmp.policy.utils.mail;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;
@RefreshScope
@Component
public class MailSender {
// SMTP服务器地址
@Value("${policy.renew.mail.smtpServer}")
private String smtpServer;
@Value("${policy.renew.mail.port}")
private String port; // 端口
@Value("${policy.renew.mail.fromUserName}")
private String fromUserName;
@Value("${policy.renew.mail.fromUserPassword}")
private String fromUserPassword;
@Value("${policy.renew.mail.subject}")
private String subject; // 邮件主题
public void sendMailText(MailInfo mailInfo) throws Exception {
mailInfo.setSmtpServer(smtpServer);
mailInfo.setPort(port);
mailInfo.setFromUserName(fromUserName);
mailInfo.setFromUserPassword(fromUserPassword);
mailInfo.setSubject(subject);
//1、连接邮件服务器的参数配置
Properties props = new Properties();
//设置用户的认证方式
props.setProperty("mail.smtp.auth", "true");
//设置传输协议
props.setProperty("mail.transport.protocol", "smtp");
//设置发件人的SMTP服务器地址
props.setProperty("mail.smtp.host", mailInfo.getSmtpServer());
// MailSSLSocketFactory sf = new MailSSLSocketFactory();
// sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory",MailInfo.SSL_FACTORY);
props.put("mail.smtp.socketFactory.fallback","false");
props.put("mail.smtp.socketFactory.port",mailInfo.getPort());
//2、创建定义整个应用程序所需的环境信息的 Session 对象
Session session = Session.getInstance(props);
//设置调试信息在控制台打印出来
session.setDebug(true);
//3、创建邮件的实例对象
Message msg = getMimeMessage(session,mailInfo);
//4、根据session对象获取邮件传输对象Transport
Transport transport = session.getTransport("smtp");
//设置发件人的账户名和密码
transport.connect(mailInfo.getSmtpServer(),mailInfo.getFromUserName(), mailInfo.getFromUserPassword());
//发送邮件,并发送到所有收件人地址,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
transport.sendMessage(msg,msg.getAllRecipients());
//如果只想发送给指定的人,可以如下写法
//transport.sendMessage(msg, new Address[]{new InternetAddress("xxx@qq.com")});
//5、关闭邮件连接
transport.close();
}
/**
* 获得创建一封邮件的实例对象
* @param session
* @return MimeMessage
*/
public static MimeMessage getMimeMessage(Session session,MailInfo mailInfo) throws Exception{
// String content,String senderAddress,String recipientAddress
//创建一封邮件的实例对象
MimeMessage msg = new MimeMessage(session);
//设置发件人地址
msg.setFrom(new InternetAddress(mailInfo.getFromUserName()));
/**
* 设置收件人地址(可以增加多个收件人、抄送、密送),即下面这一行代码书写多行
* MimeMessage.RecipientType.TO:发送
* MimeMessage.RecipientType.CC:抄送
* MimeMessage.RecipientType.BCC:密送
*/
msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(mailInfo.getToUser()));
Multipart multipart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
//设置邮件主题
msg.setSubject(mailInfo.getSubject(),"UTF-8");
//设置邮件正文
html.setContent(mailInfo.getContent(), "text/html;charset=UTF-8");
multipart.addBodyPart(html);
msg.setContent(multipart);
//设置邮件的发送时间,默认立即发送
msg.setSentDate(new Date());
msg.saveChanges();
return msg;
}
// public static void main(String [] args){
// MailSender mailSender = new MailSender();
// try {
// mailSender.sendMailText("你好啊,这个是一个简单的纯文本邮件!");
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}