把需要的參數填寫進去就可了,發送的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("[email protected]")});
//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();
// }
// }
}