SpringBoot——【發送郵件】

SpringBoot發送郵件

發送郵件原理:

最早的郵件傳輸協議:

SMTP協議:

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議簇,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。

POP3協議: 

POP3,全名爲"Post Office Protocol - Version 3",即"郵局協議版本3"。是TCP/IP協議族中的一員,由RFC1939 定義。本協議主要用於支持使用客戶端遠程管理在服務器上的電子郵件。提供了SSL加密的POP3協議被稱爲POP3S。

目前郵件傳輸協議:

IMAP協議:

IMAP(Internet Mail Access Protocol,Internet郵件訪問協議)以前稱作交互郵件訪問協議(Interactive Mail Access Protocol)。IMAP是斯坦福大學在1986年開發的一種郵件獲取協議。它的主要作用是郵件客戶端(例如MS Outlook Express)可以通過這種協議從郵件服務器上獲取郵件的信息,下載郵件等。當前的權威定義是RFC3501。IMAP協議運行在TCP/IP協議之上,使用的端口是143。它與POP3協議的主要區別是用戶可以不用把所有的郵件全部下載,可以通過客戶端直接對服務器上的郵件進行操作。

Mime協議:

MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。

郵件發送流程:

 

郵件發送歷史:

創建SpringBoot項目配置模板

登陸網站:https://start.spring.io/

 導入到 IDEA編輯器中:

可以將模板項目重命名爲自定義的,需要修改:

修改項目名,修改pom.xml文件中的兩處地方:

修改後我們的項目目錄如下:

 

代碼實現:

一、發送文本郵件

第一:引入相關jar包

第二:application.properties配置郵箱參數

第三:封裝SimpleMailMessage

第四:JavaMailSender進行發送

第五:測試

第一:pom.xml 中引入 spring-boot-starter-mail

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

第二:添加參數application.properties

第三:src/main/xxxx/service/MailService.java

@Service
public class MailService {

    private final Logger logger= LoggerFactory.getLogger(this.getClass());

    @Value("${spring.mail.username}")
    private String from;

    @Autowired
    private JavaMailSender javaMailSender;

  

    public void sendSimpleMail(String to,String subject,String content){
        logger.info("發送文本郵件開始:{}___{}___{}",to,subject,content);

        SimpleMailMessage simpleMailMessage=new SimpleMailMessage();
        simpleMailMessage.setTo(to);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        simpleMailMessage.setFrom(from);

        javaMailSender.send(simpleMailMessage);
    }
}

第四:單元測試src/test/xxxx/service/ServiceTest.java 

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTest {

    @Resource
    MailService mailService;

    @Resource
    TemplateEngine templateEngine;



    @Test
    public void sendSimpleMailTest(){
        mailService.sendSimpleMail("[email protected]",
            "發送第一封文本郵件",
            "搭建完畢,發送第一封文本郵件!!!");
    }

}

 控制檯打印日誌:說明發送成功

 

二、發送HTML郵件

src/main/xxxx/service/MailService.java

@Service
public class MailService {

    private final Logger logger= LoggerFactory.getLogger(this.getClass());

    @Value("${spring.mail.username}")
    private String from;

    @Autowired
    private JavaMailSender javaMailSender;

   
    public void sendHtmlMail(String to,String subject,String content){
        MimeMessage mimeMessage=javaMailSender.createMimeMessage();

        logger.info("發送HTML郵件開始:{},{},{}",to,subject,content);
        MimeMessageHelper mimeMessageHelper= null;
        try {
            mimeMessageHelper = new MimeMessageHelper(mimeMessage,true,"utf-8");
            mimeMessageHelper.setTo(to);
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(content,true);
            mimeMessageHelper.setFrom(from);

            javaMailSender.send(mimeMessage);
            logger.info("發送HTML郵件成功!");
        } catch (MessagingException e) {
            logger.error("發送HTML郵件異常",e);
        }

    }
}

src/testxxxx/service/ServiceTest.java 

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTest {

    @Resource
    MailService mailService;

    @Resource
    TemplateEngine templateEngine;


    @Test
    public void sendHtmlMailTest(){
        String content = "<html>\n"
                + "<body>\n"
                + "<h3>"+"Hello World!,這是第一封HTML郵件!!!"+"</h3>\n"
                + "</body>\n"
                + "</html>";
        mailService.sendHtmlMail("[email protected]", "發送第一封HTML郵件", content);
    }
}

 控制檯打印:日誌信息

 

三、發送附件郵件

 src/main/xxxx/service/MailService.java

@Service
public class MailService {

    private final Logger logger= LoggerFactory.getLogger(this.getClass());

    @Value("${spring.mail.username}")
    private String from;

    @Autowired
    private JavaMailSender javaMailSender;

   
    
    public void sendAttachmentsMail(String to,String subject,String content,
                                String filePath){
        MimeMessage mimeMessage=javaMailSender.createMimeMessage();
        logger.info("發送附件郵件開始:{},{},{},{}",to,subject,content,filePath);
        MimeMessageHelper mimeMessageHelper= null;
        try {
            mimeMessageHelper = new MimeMessageHelper(mimeMessage,true,"UTF-8");
            mimeMessageHelper.setTo(to);
            mimeMessageHelper.setFrom(from);
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(content,true);

            FileSystemResource fileSystemResource=
                               new FileSystemResource(new File(filePath));
            String fileName=fileSystemResource.getFilename();
            mimeMessageHelper.addAttachment(fileName,fileSystemResource);
            //可以發送多個附件或是一個數組,遍歷發送附件
            mimeMessageHelper.addAttachment(fileName+"_test1",fileSystemResource);
            mimeMessageHelper.addAttachment(fileName+"_test2",fileSystemResource);
            mimeMessageHelper.addAttachment(fileName+"_test3",fileSystemResource);
            javaMailSender.send(mimeMessage);

            logger.info("發送附件郵件成功!");
        } catch (MessagingException e) {
            logger.error("發送附件郵件異常",e);
        }

    }
}

src/test/xxxx/service/ServiceTest.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTest {

    @Resource
    MailService mailService;

    @Resource
    TemplateEngine templateEngine;


    @Test
    public void sendAttachmentsMailTest(){
        String filePath="D:/SpringBoot/helloWorld.zip";
        mailService.sendAttachmentsMail("[email protected]",
                    "發送第一封附件郵件",
                    "這是一封帶有附件的郵件",filePath);
    }
}

控制檯打印:日誌顯示

 

四、帶圖片的郵件

  src/main/xxxx/service/MailService.java

@Service
public class MailService {

    private final Logger logger= LoggerFactory.getLogger(this.getClass());

    @Value("${spring.mail.username}")
    private String from;

    @Autowired
    private JavaMailSender javaMailSender;
  

    public void sendInLineResourceMail(String to,String subject,String content,
                    String rscPath,String rscID){
        MimeMessage mimeMessage=javaMailSender.createMimeMessage();
        logger.info("發送靜態郵件開始:{},{},{},{},{}",to,subject,content,rscPath,rscID);
        MimeMessageHelper mimeMessageHelper= null;
        try {
            mimeMessageHelper = new MimeMessageHelper(mimeMessage,true,"UTF-8");
            mimeMessageHelper.setFrom(from);
            mimeMessageHelper.setTo(to);
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(content,true);

            FileSystemResource fileSystemResource=
                              new FileSystemResource(new File(rscPath));
            mimeMessageHelper.addInline(rscID,fileSystemResource);

            javaMailSender.send(mimeMessage);
            logger.info("發送圖片郵件成功!");
        } catch (MessagingException e) {
            logger.error("發送圖片郵件失敗!",e);
        }
    }
}

 src/test/xxxx/service/ServiceTest.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTest {

    @Resource
    MailService mailService;

    @Resource
    TemplateEngine templateEngine;


    @Test
    public void sendInLineMailTest(){
        String imgPath="D:/SpringBoot/mail.jpg";
        String rscId="mail001";
        String content="<html><body>"
                +"這是有圖片的文件:"
                +"<img src=\'cid"+rscId+"\'></img>"
                +"<img src=\'cid"+rscId+"\'></img>"
                +"</body></html>";
        mailService.sendInLineResourceMail("[email protected]",
                "發送第一封圖片郵件",
                content,
                imgPath,
                rscId);
    }

}

 控制檯打印:日誌信息

 

五、郵件模板

 常用模板引擎:FreeMarker  Thymeleaf  Velocity  Groovy  Mustache等。不建議使用JSP。

具體實現後面博客中查看

六、常見異常

http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

 

七、 郵件系統

需要考慮因素:

  • 獨立微服務
  • 異常處理
  • 定時重試郵件
  • 異步發送請求
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章