springboot快速啓動(十一)—— 整合Mail發送郵件

一、快速發送郵件

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章