springboot发送邮件-163邮箱

一、获取邮箱授权码

1、以163邮箱为例,页面首部找到设置,选择SMTP

在这里插入图片描述

2、开启POP3/SMTP服务
在这里插入图片描述

3、获取授权码
在这里插入图片描述

二、SpringBoot集成邮件发送

1、环境配置
  • 添加依赖
<!-- springboot 邮件mail -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
            <version>${springboot.version}</version>
        </dependency>
  • 配置文件
# 发送邮件配置
spring.mail.protocol=smtps
# 配置 smtp 服务器地址
spring.mail.host=smtp.163.com
#服务器的端口
spring.mail.port=465
# 配置邮箱用户名
spring.mail.username=xxx@163.com
# 配置申请到的授权码(刚让复制的授权码)
spring.mail.password=xxx
# 配置邮件编码
spring.mail.default-encoding=UTF-8
# 配饰 SSL 加密工厂
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
# 发送方邮件
spring.mail.from=xxx@163.com
邮箱类型SMTP服务器地址端口号
QQ邮箱smtp.qq.com465或587
sina邮箱smtp.sina.cn465或587
126邮箱smtp.126.com465或994
aliyun邮箱smtp.aliyun.com465或994
163邮箱smtp.163.com465或994
yeah邮箱smtp.yeah.net465或994
开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
  debug: true

三、代码编写

  • 工具类
@Component
public class SendEmailUtil {

    @Value("${spring.mail.from}")
    private String from; // 发送发邮箱地址

    @Autowired
    private JavaMailSender mailSender;

    /**
     * 发送纯文本邮件信息
     *
     * @param to      接收方
     * @param subject 邮件主题
     * @param content 邮件内容(发送内容)
     */
    public void sendMessage(String to, String subject, String content) {
        // 创建一个邮件对象
        SimpleMailMessage msg = new SimpleMailMessage();
        msg.setFrom(from); // 设置发送发
        msg.setTo(to); // 设置接收方
        msg.setSubject(subject); // 设置邮件主题
        msg.setText(content); // 设置邮件内容
        // 发送邮件
        mailSender.send(msg);
    }

    /**
     * 发送带附件的邮件信息
     *
     * @param to      接收方
     * @param subject 邮件主题
     * @param content 邮件内容(发送内容)
     * @param files 文件数组 // 可发送多个附件
     */
    public void sendMessageCarryFiles(String to, String subject, String content, File[] files) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //解决附件文件名称过长乱码问题
        System.setProperty("mail.mime.splitlongparameters","false");
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
            helper.setFrom(from); // 设置发送发
            helper.setTo(to); // 设置接收方
            helper.setSubject(subject); // 设置邮件主题
            helper.setText(content,true); // 设置邮件内容
            if (files != null && files.length > 0) { // 添加附件(多个)
                for (File file : files) {
                    helper.addAttachment(MimeUtility.encodeWord(file.getName(), "utf-8", "B"), file);
                }
            }
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        // 发送邮件
        mailSender.send(mimeMessage);
    }
    /**
     * 发送带附件的邮件信息
     *
     * @param to      接收方
     * @param subject 邮件主题
     * @param content 邮件内容(发送内容)
     * @param file 单个文件
     */
    public void sendMessageCarryFile(String to, String subject, String content, File file) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //解决附件文件名称过长乱码问题
        System.setProperty("mail.mime.splitlongparameters","false");
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
            helper.setFrom(from); // 设置发送发
            helper.setTo(to); // 设置接收方
            helper.setSubject(subject); // 设置邮件主题
            helper.setText(content,true); // 设置邮件内容
            helper.addAttachment(MimeUtility.encodeWord(file.getName(), "utf-8", "B"), file); // 单个附件
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        // 发送邮件
        mailSender.send(mimeMessage);
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }
}

四、测试邮件发送

@RunWith(SpringRunner.class)
@SpringBootTest(classes = AmqpApplication.class)
public class ApiApplicationTests {

    @Resource
    private SendEmailUtil emailUtil;

    @Test
    public void sendStringEmail() {
        // 测试文本邮件发送(无附件)
        String to = "axxx@163.com"; // 接收邮箱地址
        String title = "文本邮件发送测试";
        String content = "文本邮件发送测试";
        emailUtil.sendMessage(to, title, content);
    }

    @Test
    public void sendFileEmail() {
        // 测试单个附件邮件发送
        String to = "axxx@163.com"; // 接收邮箱地址
        String title = "温度信息附件邮件发送测试";
        String content = "温度信息附件邮件发送测试";
        File file = new File("C:\\Users\\xsj\\Desktop\\问题.docx");
        emailUtil.sendMessageCarryFile(to, title, content, file);
    }

    @Test
    public void sendFilesEmail() {
        // 测试多个附件邮件发送
        String to = "axxx@163.com"; // 接收邮箱地址
        String title = "多个温度信息附件邮件发送测试";
        String content = "多个温度信息附件邮件发送测试";
        File[] files = new File[2];
        files[0] = new File("C:\\Users\\xsj\\Desktop\\位图\\微信_20220729142127.jpg");
        files[1] = new File("C:\\Users\\xsj\\Desktop\\问题.docx");
        emailUtil.sendMessageCarryFiles(to, title, content, files);
    }

}
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值