springboot发送邮箱

我爱海鲸 2022-08-23 09:11:43 暂无标签

简介携带附件发送邮箱、设置附件名称时的一些坑

2、搭建一个springboot项目

1、pom文件:

        <!-- 邮件-->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.4</version>
        </dependency>

2、application.yml配置文件:

# Spring配置
# 数据源配置
spring:
  mail:
    host: smtp.exmail.qq.com
    protocol: smtp
    port: 465
#    username: 123456@qq.com #邮箱地址
#    password: 123456 #PO3/SMTP服务时邮箱的授权码
    username: 123456@test.com #邮箱地址
    password: 123456 #PO3/SMTP服务时邮箱的授权码
    properties:
      mail:
        smtp:
          auth: true
          ssl:
            enable: true
            socketFactory:
              class: com.sun.mail.util.MailSSLSocketFactory
              fallback: false

3、邮件业务层

接口:

public interface MailService {


    /**
     * 发送邮箱
     * @param email
     * @param content
     * @return 成功返回1 失败返回0
     */
    int sendEmail(String email, String content);


    /**
     * 发送邮箱
     * @param toEmail 发送到哪一个邮箱
     * @param bytes 附件字节数组
     * @param attachName 邮件名称
     * @param content 邮件的内容
     * @return 成功返回1 失败返回0
     */
    int sendEmail(String toEmail,byte[] bytes,String attachName,String content);
}

实现:

@Service
@Slf4j
public class MailServiceImpl implements MailService {
    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.username}")
    private String from;

    @Override
    public int sendEmail(String email, String content) {
        try {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
            //发送者邮箱地址
            message.setFrom(from);
            //收件人邮箱地址
            message.setTo(email);
            message.setSubject("大帅哥");
            message.setText(content, true);
            javaMailSender.send(mimeMessage);
        } catch (Exception e) {
            log.error("发送邮件验证码失败,异常信息:{}",e.getMessage,e);
            return 0;
        }
        return 1;
    }

    @Override
    public int sendEmail(String toEmail, byte[] bytes,String attachName,String content) {
        try {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper message = new MimeMessageHelper(mimeMessage,true,"utf-8");
            //发送者邮箱地址
            message.setFrom(from);
            //收件人邮箱地址
            message.setTo(toEmail);
            // 邮件附件
            message.addAttachment(MimeUtility.encodeWord(attachName), new ByteArrayResource(bytes));
            message.setSubject("大帅哥");
            message.setText(content, true);
            javaMailSender.send(mimeMessage);
        } catch (Exception e) {
            log.error("发送邮件验证码失败,异常信息:{}",e.getMessage,e);
            return 0;
        }
        return 1;
    }
}

4、使用邮件携带附件时,附件的名称可能为乱码

通过这一段代码 MimeUtility.encodeWord(attachName) 即可解决乱码问题

你好:我的2025