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("xxxxx@163.com",
            "发送第一封文本邮件",
            "搭建完毕,发送第一封文本邮件!!!");
    }

}

 控制台打印日志:说明发送成功

 

二、发送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("xxxxxx@163.com", "发送第一封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("xxxxx@163.com",
                    "发送第一封附件邮件",
                    "这是一封带有附件的邮件",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("xxxxx@163.com",
                "发送第一封图片邮件",
                content,
                imgPath,
                rscId);
    }

}

 控制台打印:日志信息

 

五、邮件模板

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

具体实现后面博客中查看

六、常见异常

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

 

七、 邮件系统

需要考虑因素:

  • 独立微服务
  • 异常处理
  • 定时重试邮件
  • 异步发送请求
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值