一、快速發送郵件
SMTP協議:
SMTP是一個相對簡單的基於文本的協議。在其之上指定了一條消息的一個或多個接收者(在大多數情況下被確認是存在的),然後消息文本會被傳輸。
工作過程:
SMTP協議的工作過程可分爲如下3個過程:
(1)建立連接:在這一階段,SMTP客戶請求與服務器的25端口建立一個TCP連接。一旦連接建立,SMTP服務器和客戶就開始相互通告自己的域名,同時確認對方的域名。
(2)郵件傳送:利用命令,SMTP客戶將郵件的源地址、目的地址和郵件的具體內容傳遞給SMTP服務器,SMTP服務器進行相應的響應並接收郵件。
(3)連接釋放:SMTP客戶發出退出命令,服務器在處理命令後進行響應,隨後關閉TCP連接。
步驟
1、導入依賴
<!--郵件依賴-->
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、配置文件
server.port=8890
# JavaMailSender 郵件發送的配置
spring.mail.host=smtp.163.com #QQ:smtp.qq.com
[email protected]
#授權碼
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8
#eureka.client.serviceUrl.defaultZone=http://47.97.188.93:8761/eureka/
#spring.application.name=mail-server
[email protected] #要和上面的username一致
演示代碼
* @description mail配置類
**/
@Component
public class MailMsg {
@Value("${mail.sender}")
private String mailSender;
public String getMailSender() {
return mailSender;
}
public void setMailSender(String mailSender) {
this.mailSender = mailSender;
}
}
* @description 實體類
**/
public class MailBean implements Serializable {
/**
* 郵件接收人
*/
private String recipient;
/**
* 郵件主題
*/
private String subject;
/**
* 郵件內容
*/
private String content;
public String getRecipient() {
return recipient;
}
public void setRecipient(String recipient) {
this.recipient = recipient;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
* @description 控制層
**/
@RestController
@RequestMapping(value = "v1/api")
public class SendMailTest {
@Autowired
private MailMsg mailMsg;
@Autowired
private JavaMailSender mailSender;
/**
* 發送簡單的郵件
* @param mailBean
* @return
* @throws Exception
*/
@RequestMapping(value = "/sendmail",method = RequestMethod.GET)
public String sendSimpleMail(@RequestBody MailBean mailBean) throws Exception {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(mailMsg.getMailSender());
message.setTo( mailBean.getRecipient());
message.setSubject(" Theme " );
message.setText("Hello: how have you been!");
mailSender.send( message);
return "發送成功!";
}
/**
* 發送HTML格式的郵件
* @param mailBean
*/
@RequestMapping(value = "/sendHtml",method = RequestMethod.GET)
public String sendHTMLMail(@RequestBody MailBean mailBean) {
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
mimeMessageHelper.setFrom(mailMsg.getMailSender());
mimeMessageHelper.setTo(mailBean.getRecipient());
mimeMessageHelper.setSubject(mailBean.getSubject());
StringBuilder sb = new StringBuilder();
sb.append("<h1>SpirngBoot測試郵件HTML</h1>")
.append("\"<p style='color:#F00'>你是真的太棒了!</p>");
mimeMessageHelper.setText(sb.toString(), true);
mailSender.send(mimeMailMessage);
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
/**
* 發送靜態文件的郵件(附件)
* @param mailBean
*/
@RequestMapping(value = "/sendAttachment",method = RequestMethod.GET)
public String sendAttachmentMail(@RequestBody MailBean mailBean) {
MimeMessage mimeMailMessage = null;
try {
mimeMailMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
mimeMessageHelper.setFrom(mailMsg.getMailSender());
mimeMessageHelper.setTo(mailBean.getRecipient());
mimeMessageHelper.setSubject(mailBean.getSubject());
mimeMessageHelper.setText(mailBean.getContent());
//文件路徑
FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/image/mail.jpg"));
mimeMessageHelper.addAttachment("mail.jpg", file);
mailSender.send(mimeMailMessage);
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
}
一般發送郵件/短信都會開啓異步任務去處理 所以大家自行使用@EnableAsync註解開啓
異步任務開啓步驟:https://blog.csdn.net/weixin_42083036/article/details/103140051