如何利用一个spring boot建立一个简易邮件发送系统

一、 首先需要通过spring boot进行自动的邮箱发送的话,需要对你的邮箱进行相应的授权,进入你的邮箱后,点击设置选择如图中的选项:
设置邮箱第三方授权
点击进入后,直接选择开启就可以了,此处我已经开启了,就不方便截图了,此时记住授权的密码,当我们在spring boot中进行密码配置时,指的就是这个密码。
顺便提一下我使用的是126邮箱。

二、当我们的邮箱授权开启后,我们就开始准备使用spring boot建立一个简易的邮件系统了。首先我们利用idea添加一个spring boot项目,然后我们在pom.xml中添加我们发送邮件所需要的依赖。

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

此时,我们所需要的依赖已经引入,现在我们还需要在application.properties中添加我们邮件相关的配置信息。所需要的配置信息如下:

spring.mail.host=smtp.126.com  //这是我们的邮箱的协议
spring.mail.username=你的邮箱名@126.com  //这里填写的你邮箱名
spring.mail.password=密码  //这里填写你授权时所设定的密码
spring.mail.default-encoding=utf-8  //这里设置邮件发送的字符编码为utf-8

好了,至此我们正式开发之前的配置也弄好了,下面我们将开始正式开发了。

三、首先我们建立一个名为service的包,我们的邮箱的业务层类将在写在此包中。在service包中建立一个MailService类,首先我们在这个类中定义两个所有方法都需要用到的变量,他们分别是:

@Value("${spring.mail.username}")
    private String from;   //这里表示发件人是谁,一般都是你的邮箱名,所以我们就取邮箱名

    @Autowired
    private JavaMailSender mailSender;  //这里是声明一个邮件发送的对象,并使用注解,将其变成bean

然后我们在test的文件夹下写一个MailServiceTest类,该类就是用来测试我们的邮件发送的。下面我们将写三个典型的类别的邮件发送,一种是纯文本的邮件发送,一种是HTML的邮件发送,还有最后一种是带附件的邮件发送。

1)纯文本的邮件发送

public void SimpleSend(String to,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();  //声明一个简单的邮件发送的对象
        simpleMailMessage.setTo(to);  //这是表示邮件发送给谁
        simpleMailMessage.setSubject(subject);  //这是表示邮件的主题
        simpleMailMessage.setText(content);//这是表示邮件的内容
        simpleMailMessage.setFrom(from); //这是设置邮件发送人

        mailSender.send(simpleMailMessage);//利用邮件发送类进行邮件的发送
    }

至此,我们的一个简单的纯文本邮件发送方法写完了,下面我们在test的那个类中写一个test方法,来测试这个方法是否能够执行成功:

@Test
    public void simpleMailsendTest(){
        mailService.SimpleSend("目的邮箱","第一封邮件","大家好,这是我的第一封邮件");
    }

直接执行这个方法,很快你就能看到这个方法是否执行成功,正常来说,这封邮件无论发给谁都会成功的。这是什么意思呢?后面的测试中你会发现,有些邮件的发送方法执行后没有报错,可是目的邮箱并没有接收到,后面我再解释如何解决部分的这种问题!
好了现在纯文本邮件发送完毕了,是不是非常简单??那我们再继续往下走吧!

2)HTML邮件发送
HTML邮件发送就稍微比纯文本的邮件发送在方法内部要多几个步骤了,但是同样也是不复杂,我们还是直接上代码,然后再代码中的注释给出解释:

public void HtmlSend(String to,String subject,String content) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();  //这时候我们就不能声明上一个那个类的对象了,必须声明这个对象,也即用邮件发送对象创建的一个邮件对象
        MimeMessageHelper helper = new MimeMessageHelper(message,true);  
        helper.setText(content,true);//这是跟文本邮件的核心区别,他必须在后面声明为true类型,它默认是false,也就是说默认是纯文本的
        helper.setTo(to);
        helper.setFrom(from);
        helper.setSubject(subject);

        mailSender.send(message);
    }

大家可以看到,其实差别并不大,也不过多了几个弯弯而已,那个设置文本内容方法的第二个参数才是真正的核心。
下面我们来看看我们的测试方法:

 @Test
    public void htmlSendTest() throws MessagingException {
        String content = "<html>\n"+
                "<body>\n"+
                  "<h3>hello world 这是第一封HTML文件</h3>\n"+
                "</body>\n"+
                "<html>";

        mailService.HtmlSend("目的邮箱","这是第一封HTML邮件",content);
    }

大家可以很明显的看出,我这里的文本内容其实就是一段HTML代码,大家可以发送成功后接收一下看看,它会自动解析这个HTML代码,变成你想呈现的内容。因此有一个很简单的应用,你可以在这个HTML中写一个图片标签,路径什么的设置好,看看你收到的邮件中图片是否会显示正常。

3)带附件的邮件发送
发送一个带有附件的邮件,那么就必定会涉及到文件上传的问题,我们看看如何实现:

public void sendAttachmentsMail(String to,String subject,
                                    String content,String filepath) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message,true);
        helper.setTo(to);
        helper.setFrom(from);
        helper.setText(content,true);
        helper.setSubject(subject);

        FileSystemResource file = new FileSystemResource(new File(filepath));  //通过文件路径获取文件
        String fileName = file.getFilename();//获取文件名
        helper.addAttachment(fileName,file);//固定的方法,表示附件的名字和附件本身
        mailSender.send(message);
    }

大家可以看到,其实就是多了一个文件处理的过程。那么我们再看看测试方法:

@Test
    public void sendAttachmentsMailTest() throws MessagingException {
        String filepath = "C://Users/Administrator/Desktop/SpringBoot/abc.zip";
        mailService.sendAttachmentsMail("目的邮箱名","这是第一封带附件的邮件",
                "这是一封带附件的邮件",filepath);
    }

好了,至此我们三种类别的邮件应该说已经发送完毕了。那么我想应该有一些同学不是一帆风顺吧,有没有需要邮件发送失败??有没有遇到邮件发送被打回??
首先,我们在做这些测试的时候,最好将我们发送邮箱也作为接收邮箱,一般来说,这样的话测试时不会有问题的,但是确实不是很符合现实生活的实际场景,那么,如何解决邮件发送的554问题和回退问题呢???
我们可以首先给邮件添加一个马甲:

message.addHeader("X-Mailer","Microsoft Outlook Express 6.00.2900.2869");

但是往往这样可能还不行,应该还是会报错说发送的邮件不合法,这时候你就需要改改你的题目和内容了,非常有趣的是,我随便弄了一个名字和内容竟然真的就成功了,可以说十分有趣了!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值