第二章-開發社群登入模組-1-傳送郵件

守望碼靈發表於2020-10-29
  • 郵箱設定 啟用客戶端SMTP服務  xxxxxx(授權碼) 登入新浪郵箱賬號
  • Spring Email(利用這個技術)
    • - 匯入jar包

      - 郵箱引數配置

      - 使用JavaMailSender傳送郵件

      javaMail使用sina郵箱報535 Error: authentication failed

  • 模板引擎
    • 使用Thymeleaf傳送HTML郵件

      主動去呼叫Thymeleaf模板引擎,該引擎也已經被spring容器管理了起來

application.properties檔案配置

spring.mail.host=smtp.sina.com
spring.mail.port=465
spring.mail.username=cuihua4huajie@sina.com
spring.mail.password=40699712b045d211(這裡是授權碼)
sprig.mail.protocol=smtps(表示啟用的是安全協議)
spring.mail.properties.mail.smtp.ssl.enable=true

MailClient.java類:重點是為了構建MimeMessage

@Component
public class MailClient { //代替應用客戶端或者就是一個客戶端)
    public static final Logger logger = LoggerFactory.getLogger(MailClient.class);
    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String from;
    private TemplateEngine templateEngine;
    public void sendMail(String to, String subject, String content){
        try{
            //注意這裡使用的是javax.mail.internet.MimeMessage,注意別導錯包了
            MimeMessage message = mailSender.createMimeMessage();
            //利用幫助類構建更加詳細的message
            MimeMessageHelper helper = new MimeMessageHelper(message);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true); true:表示允許支援html文字
            mailSender.send(helper.getMimeMessage());
        } catch (MessagingException e){
            logger.error("傳送郵件失敗:" + e.getMessage());
        }
}
}

MailTest.java  分別傳送文字和HTML檔案

@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class MailTests {
    @Autowired
    private MailClient mailClient;
    @Autowired
    private TemplateEngine templateEngine; //Thymeleaf模板引擎
    @Test
    public void testTextMail(){
        //會去訪問新浪伺服器,讓伺服器幫助我們去傳送郵件
        mailClient.sendMail("1577153977@qq.com", "test", "test");
    }
    @Test
    public void testHtmlMail(){
        //thymeleaf模板
        Context context = new Context();
        context.setVariable("username", "cuihua");
        //會幫我們返回渲染出一個html網頁
        //利用thymeleaf模板引擎去幫助我們傳送資訊,但是需要我們主動去呼叫 利用TemplateEngine 這個類
        String content =  templateEngine.process("/mail/demo", context);//通過process就會生成我們html的字串
        System.out.println(content);
        mailClient.sendMail("1577153977@qq.com", "HTML", content);
    }
}
JavaMailSender和TemplateEngine會被自動裝配到Spring容器中,但是MimeMessage和MimeMessageHelper不會被自動載入。

 

相關文章