一步一步教你如何使用springboot发送邮件,以及项目打包到阿里云服务器发送邮件失败的问题

6 篇文章 0 订阅
4 篇文章 0 订阅

这里主要以QQ邮件的方式进行发送

想学习更多,请关注个人微信GZH:Magic全靠想象

1、发送邮件配置

  • 引入发送邮件satart
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
  • 配置application.properties
# 字符集
spring.mail.default-encoding= utf-8
# 邮件host类型
spring.mail.host= smtp.qq.com
# 发送者邮箱
spring.mail.username= 1599532618@qq.com
# 发送者邮箱的安全验证码
spring.mail.password= ***********

获取password方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、邮件entity

package com.vcback.vc_back_main.entity;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @author 高俊
 * @create 2022-08-2022/8/8-9:24
 */
@Data
@Component
public class EmailEntity {
    // 发送人
    @Value("${spring.mail.username}")
    private String from;

    // 收件人
    private String to;

    // 邮件主题
    private String subject;

    // 文本内容
    private String text;

    // 发送时间
    private Date sentDate = new Date();

    // 附件路径
    private String filePath;

    // jign'tai
    private String srcId;
}

3、邮件工具类

package com.vcback.vc_back_main.utils;

import com.easy.tool.utils.bean.BeanUtils;
import com.easy.tool.utils.uuid.UUIDUtils;
import com.vcback.exception.CommonException;
import com.vcback.vc_back_main.entity.EmailEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * @author 高俊
 * @create 2022-08-2022/8/8-9:29
 */
@Component
public class SendMailUtils {

    // html格式邮件前后缀
    private String htmlPrefix = "<html><body>";
    private String htmlsuffix = "</body></html>";

    @Resource
    private JavaMailSender javaMailSender;

    // 简单发送邮件
    public void sendSimpleEmail(EmailEntity entity){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(entity.getFrom());
        message.setTo(entity.getTo());
        message.setSentDate(entity.getSentDate());
        message.setSubject(entity.getSubject());
        message.setText(entity.getText());

        try {
            javaMailSender.send(message);
        }catch (MailException e){
            throw new CommonException(500,"简易邮件发送失败");
        }
    }

    // 发送html格式内容邮件
    public void sendHtmlEmail(EmailEntity entity){
        MimeMessage message = javaMailSender.createMimeMessage();

        try {
            //true表示需要创建一个multipart message
            MimeMessageHelper mime = new MimeMessageHelper(message, true);
            mime.setTo(entity.getTo());
            mime.setFrom(entity.getFrom());
            mime.setSubject(entity.getSubject());
            mime.setText(htmlPrefix + entity.getText() + htmlsuffix,true);

            javaMailSender.send(message);

        } catch (MessagingException e) {
            throw new CommonException(500,"发送html邮件时发生异常");
        }

    }

    // 发送附件邮件
    public void sendFileEmail(EmailEntity entity){
        MimeMessage message = javaMailSender.createMimeMessage();

        String filePath = entity.getFilePath();;

        try {
            //true表示需要创建一个multipart message
            MimeMessageHelper mime = new MimeMessageHelper(message, true);
            mime.setTo(entity.getTo());
            mime.setFrom(entity.getFrom());
            mime.setSubject(entity.getSubject());
            mime.setText(htmlPrefix + entity.getText() + htmlsuffix,true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
            mime.addAttachment(fileName, file);

            javaMailSender.send(message);

        } catch (MessagingException e) {

            throw new CommonException(500,"发送附件邮件时发生异常");
        }

    }

    // 发送静态资源文件
    public void sendStaticEmail(EmailEntity entity){
        MimeMessage message = javaMailSender.createMimeMessage();

        String filePath = entity.getFilePath();;

        try {
            //true表示需要创建一个multipart message
            MimeMessageHelper mime = new MimeMessageHelper(message, true);
            mime.setTo(entity.getTo());
            mime.setFrom(entity.getFrom());
            mime.setSubject(entity.getSubject());
            mime.setText(htmlPrefix + entity.getText() + htmlsuffix,true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            mime.addAttachment(entity.getSrcId(), file);

            javaMailSender.send(message);

        } catch (MessagingException e) {
            throw new CommonException(500,"发送静态资源文件邮件时发生异常");
        }

    }
}

4、项目打包到aliyun服务器发送邮件失败的问题

原因:由于阿里云服务器因为安全考虑不开放发送邮件的默认端口 25 ,所以导致邮件发送被拦截

解决方案:这里通过使用465端口以及ssl加密方式发送邮件,所以在application.properties中添加配置

# 阿里云服务器发送邮件配置项
# SSL Config
spring.mail.port=465
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.socketFactory.port=465
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值