Spring boot 发送邮件

1、添加依赖

<!-- 发送邮件. -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2、配置application.properties

# 设置邮箱主机,以QQ邮箱为例子
spring.mail.host=smtp.qq.com
# 设置用户名,邮箱地址
spring.mail.username=XXX@qq.com
# 设置密码,此密码是授权码而不是qq邮箱密码
spring.mail.password=kjhleetwedyubbcc
# 设置是否需要认证,如果为true,那么用户名和密码就必须的,如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。
spring.mail.properties.mail.smtp.auth=true
# STARTTLS[1] 是对纯文本通信协议的扩展。
# 它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

3、开启邮箱服务

登录QQ邮箱,进行设置,如下图。

设置完成之后,得到的授权码就是上面第二步设置的密码。

4、测试代码(不带附件)

package com.test;

import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppMailTest {
    @Autowired
    private JavaMailSender javaMailSender;

    /*
     * 修改application.properties的用户才可以发送
     */
    @Test
    public void sendSimpleMail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("xxx@qq.com");//发送者
        message.setTo("xxx@qq.com");//接收者
        message.setSubject("发送邮件测试");//标题
        message.setText("邮件内容");//邮件内容
        javaMailSender.send(message);//发送邮件
    }
}

5、测试代码(带附件)

package com.test;

import com.sun.xml.internal.messaging.saaj.packaging.mime.MessagingException;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.FileSystemResource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppMailsTest {
    @Autowired
    private JavaMailSender mailSender;

    /*
     * 测试发送附件.(这里发送图片.)
     */
    @Test
    public void sendSimpleMail() throws MessagingException {
        //这个是javax.mail.internet.MimeMessage下的
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        //基本设置
        helper.setFrom("747024934@qq.com");//发送者
        helper.setTo("3067810776@qq.com");//接收者
        helper.setSubject("图片");//邮件主题
        helper.setText("附件测试");//邮件内容
        //org.springframework.core.io.FileSystemResource下的:
        //附件1,获取文件对象.
        FileSystemResource resource = new FileSystemResource(new File("E:\\images\\1.jpg"));
        //添加附件,这里第一个参数是在邮件中显示的名称,也可以直接是head.jpg,但是一定要有文件后缀,不然就无法显示图片了。
        helper.addAttachment("美女.jpg", resource);
        //附件2
        FileSystemResource resource1 = new FileSystemResource(new File("E:\\images\\桌面1.jpg"));
        helper.addAttachment("桌面.jpg", resource1);
        mailSender.send(message);
    }
}

6、测试代码(嵌入静态资源)

package com.test;

import com.sun.xml.internal.messaging.saaj.packaging.mime.MessagingException;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.FileSystemResource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class AppMails1Test {
    @Autowired
    private JavaMailSender mailSender;

    /*
     * 测试发送附件.(这里发送图片.),邮件中使用静态资源.
     */
    @Test
    public void sendSimpleMail() throws MessagingException {
        //这个是javax.mail.internet.MimeMessage下的
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        //基本设置
        helper.setFrom("747024934@qq.com");//发送者
        helper.setTo("3067810776@qq.com");//接收者
        helper.setSubject("图片(邮件主题)");//邮件主题
        // 邮件内容,第二个参数指定发送的是HTML格式
        //说明:嵌入图片<img src='cid:head'/>,其中cid:是固定的写法,而images是一个contentId。
        helper.setText("<body>这是图片:<img src='cid:images' /> </body>", true);//邮件内容
        //org.springframework.core.io.FileSystemResource下的:
        //附件1,获取文件对象.
        FileSystemResource resource = new FileSystemResource(new File("E:\\images\\1.jpg"));
        //添加附件,这里第一个参数是在邮件中显示的名称,也可以直接是head.jpg,但是一定要有文件后缀,不然就无法显示图片了。
        helper.addInline("images", resource);
        mailSender.send(message);
    }
}

 

这里需要注意的是addInline函数中资源名称head需要与正文中cid:images对应起来

嵌入图片<img src='cid:images'/>,其中cid:是固定的写法,而images是一个contentId。

5、运行代码

如果以上都按步骤设置完成了,这是邮件发送成功。

参考博客:http://412887952-qq-com.iteye.com/blog/2305992

 

posted @ 2019-01-18 17:25  明天,你好啊  阅读(263)  评论(0编辑  收藏  举报