SpringBoot集成网易企业邮箱,亲测可用

注意:

服务器需要打开994的端口。不然会超时。

第一步

引入依赖。

<!-- SpringBoot——邮件服务 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

第二步

配置application.yml文件

spring:
    ##邮件服务
    mail:
      host: smtphz.qiye.163.com
      username: 你的邮箱
      password: 你的授权码
      senderName: 你的邮箱
      default-encoding: utf-8
      properties:
        mail:
          smtp:
            ssl:
              enable: true
            auth: true
      port: 994

第三步

增加配置类。

package com.penghu.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @author :Mall
 */
@Configuration
@Data
public class EmailConfig {
    @Value("${spring.mail.senderName}")
    private String senderName;
}

第四步

实现类。

package com.penghu.service.email;

import com.penghu.config.EmailConfig;
import com.penghu.dao.email.EmailSendlogMapper;
import com.penghu.entity.email.EmailSendlog;
import com.penghu.utils.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring5.SpringTemplateEngine;

import javax.annotation.Resource;
import javax.mail.internet.MimeMessage;
import java.time.Duration;

/**
 * @author :Mall
 * @description : 邮件发送服务层实现
 */
@Service
public class EmailService {
    // 日志
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    // Redis对象,主要用于保证幂等性
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    // Email发送对象
    @Resource
    private JavaMailSender javaMailSender;

    // template模板
    @Autowired
    private SpringTemplateEngine templateEngine;

    // Email邮件配置
    @Autowired
    private EmailConfig emailConfig;


    /**
     * 发送普通文本内容
     *
     * @param to       发送给谁
     * @param title    标题
     * @param content  内容
     * @param identity 唯一标识
     * @return
     */
    public Result<Object> sendText(String to, String title, String content, MultipartFile file, String identity) {
        // 用redis的setNx操作,保证幂等性
        Result<Object> result = new Result<Object>();
        if (stringRedisTemplate.opsForValue().setIfAbsent(identity + "Text", to, Duration.ofMinutes(5))) {
            EmailSendlog emailSendlog = new EmailSendlog();
            try {
                MimeMessage mimeMessage = javaMailSender.createMimeMessage();
                MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, file != null);

                //邮件的标题
                messageHelper.setSubject(title);
                messageHelper.setFrom(emailConfig.getSenderName());
                //邮件接收者(可发送多个)
                String[] toArray = to.split("[,]");
                messageHelper.setTo(toArray);

                //邮件的内容,不是Html
                messageHelper.setText(content, false);
                //添加附件
                if (file != null)
                    messageHelper.addAttachment(file.getOriginalFilename(), file);

                javaMailSender.send(messageHelper.getMimeMessage());
                logger.info(identity + ":" + to + "发送成功");
                return result;
            } catch (Exception e) {
                logger.info(e.getMessage());
                result.success("发送失败");
                return result;
            } finally {
                // 发送成功后,删除key
                stringRedisTemplate.delete(identity + "Text");
            }
        } else {
            result.error("发送中,请稍后");
            return result;
        }
    }

    /**
     * 发送Html内容
     *
     * @param to       发送给谁
     * @param title    标题
     * @param content  内容
     * @param identity 唯一标识
     * @return
     */
    public Result<Object> sendHtml(String to, String title, String content, MultipartFile file, String identity) {
        Result<Object> result = new Result<>();
        // 用redis的setNx操作,保证幂等性
        if (stringRedisTemplate.opsForValue().setIfAbsent(identity + "Html", to, Duration.ofMinutes(5))) {
            EmailSendlog emailSendlog = new EmailSendlog();
            try {
                MimeMessage mimeMessage = javaMailSender.createMimeMessage();
                MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, file != null);
                //邮件的标题
                messageHelper.setSubject(title);
                messageHelper.setFrom(emailConfig.getSenderName());
                //邮件接收者(可发送多个)
                String[] toArray = to.split("[,]");
                messageHelper.setTo(toArray);

                //邮件的内容
                messageHelper.setText(content, true);
                //添加附件
                if (file != null) {
                    messageHelper.addAttachment(file.getOriginalFilename(), file);
                }

                javaMailSender.send(messageHelper.getMimeMessage());
                logger.info(identity + ":" + to + "发送成功");
                result.success("发送成功");
                return result;
            } catch (Exception e) {
                e.printStackTrace();
                logger.info(e.getMessage());
                result.success("发送失败");
                return result;
            } finally {
                // 发送成功后,删除key
                stringRedisTemplate.delete(identity + "Html");
            }
        } else {
            result.success("发送中,请稍后");
            return result;
        }
    }

    /**
     * 发送模板1内容
     *
     * @param to       发送给谁
     * @param title    标题
     * @param content  内容
     * @param identity 唯一标识
     * @return
     */
    public Result<Object> sendTemplate1(String to, String title, String content, MultipartFile file, String identity) {
        Result<Object> result = new Result<>();
        // 用redis的setNx操作,保证幂等性
        if (stringRedisTemplate.opsForValue().setIfAbsent(identity + "Html", to, Duration.ofMinutes(5))) {
            EmailSendlog emailSendlog = new EmailSendlog();
            try {
                MimeMessage mimeMessage = javaMailSender.createMimeMessage();
                MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, file != null);
                //邮件的标题
                messageHelper.setSubject(title);


                messageHelper.setFrom(emailConfig.getSenderName());
                //邮件接收者(可发送多个)
                String[] toArray = to.split("[,]");
                messageHelper.setTo(toArray);


                //邮件的内容,利用 Thymeleaf 模板构建 html 文本
                Context ctx = new Context();
                ctx.setVariable("title", title);
                ctx.setVariable("content", content);
                String emailText = templateEngine.process("template1", ctx);
                //发送内容
                messageHelper.setText(emailText, true);
                //添加附件
                if (file != null) {
                    messageHelper.addAttachment(file.getOriginalFilename(), file);
                }
                javaMailSender.send(messageHelper.getMimeMessage());
                logger.info(identity + ":" + to + "发送成功");

                result.success("发送成功");
                return result;
            } catch (Exception e) {
                logger.info(e.getMessage());
                result.success("发送失败");
                return result;
            } finally {
                // 发送成功后,删除key
                stringRedisTemplate.delete(identity + "Html");
            }
        } else {
            result.success("发送中,请稍后");
            return result;
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringBoot中常用的技术集成包括@ConfigurationProperties、集成Mybatis-Plus、Web组件的使用、集成Redis、集成RabbitMQ、LogBack日志、Swegger2集成、阿里云OSS对象存储、HttpClient和Task定时任务等。 在配置类中,可以使用@Configuration注解声明一个配置类,并通过@Bean注解声明交换机、队列和交换机队列绑定的方法。例如,在MQConfig配置类中,声明了一个名为springbootExchange的交换机、一个名为springbootQueue的队列,并通过@Bean注解将队列绑定到交换机上。 在启动类中,可以使用@SpringBootAppliation注解标记一个类为SpringBoot的启动类,并通过@ServletComponentScan注解自动扫描WebServlet注解。例如,在GpDblSpringbootServletApplication启动类中,使用了@SpringBootAppliation注解,并通过@ServletComponentScan注解自动扫描WebServlet注解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SpringBoot常用技术集成](https://blog.csdn.net/weixin_54158370/article/details/125203662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [SpringBoot 集成](https://blog.csdn.net/weixin_45676630/article/details/109279977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁蛋的铁,铁蛋的蛋

留一杯咖啡钱给作者吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值