JavaSenderMail发送邮件(QQ及OFFICE365)

前言

这是今天处理的公司安排的一个任务:客户系统发送offices365邮件报错535

之前没怎么解除邮件业务,于是先搭个简单的QQ邮件Demo熟悉一下吧,没有啥公网内网的麻烦(之前听说有内网限制,我还处理了一些环境上的问题)。发送的话就直接用现成的MagicAPI项目吧,就不用Postman了。

什么是SMTP,IMAP,TLS

SMTP(简单邮件传输协议):用于将邮件从发件人客户端发送到收件人服务器,也可以在邮件服务器之间转发

IMAP(网络邮件/消息访问协议):就是用来收/读邮件的

TLS(传输层安全协议):对传输的邮件进行加密的

一,引入依赖

不用传统的JavaMail了,直接用SpingBoot提供的mail-starter,简单方便;

java 复制代码
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-mail</artifactId>
      </dependency>


        <dependency>
            <groupId>org.ssssssss</groupId>
            <artifactId>magic-api-spring-boot-starter</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.ssssssss</groupId>
            <artifactId>magic-api-plugin-task</artifactId>
            <version>2.1.1</version>
        </dependency>

二,前往QQ邮箱设置,根据要求获取配置信息,开通SMTP服务及获取授权码

三,编辑配置信息及发送通用类

不同的邮件服务器复用下面这个格式模板就可以了

java 复制代码
   host: smtp.qq.com
#    port: 465
#    username: 1034522247@qq.com
#    password: gxytmhufdfuouohhhs
#    properties:
#      mail:
#        smtp:
#          auth: true
#          ssl:
#            enable: true

主类:写了一个工具类,将这个类交给Spring管理后,可以直接在Magic平台引入使用。这个比较简单,就几个固定步骤;

MimeMessage 就是一个用来构建复杂邮件对象的类,简单邮件可以用SimpleMailMessage

MimeMessageHelper 可以看作一个辅助类,它可以简化MimeMessage构建邮件对象的过程,只需要set..... (传入原对象,true表示允许添加附件等邮件多个部分,并设置编码)

java 复制代码
import javax.mail.internet.MimeMessage;
@Slf4j
@Component("mailUtil")
public class MailUtil {

    @Autowired
    private JavaMailSender mailSender;

    public boolean sendMail(String from, String to, String subject, String content) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");

            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true); // true表示HTML格式

            mailSender.send(message);
            log.info("邮件发送成功!");
            return true;
        } catch (Exception e) {
            log.error("邮件发送失败!{}",e.getMessage());
            e.printStackTrace();
            return false;
        }
    }
}

四,调试,启动项目后,打开Magic地址,添加接口后及可以写接口请求了,如

java 复制代码
import com.example.magicapi.utils.MailUtil
import 'com.example.magicapi.utils.MailUtil' as MailUtil;

Boolean res = MailUtil.sendMail(
    "193485147@qq.com",
    "2279175873@qq.com",
    "垃圾邮件",
    "这是垃圾邮件"
);

if (res){
    return "发送成功";
}else{
    return "发送失败"
}

五,踩坑点

发送OFFICE365邮件也是同样的道理,一套模板就可以了,这个问题的两个主要点是:

1,密码那块必须是服务器生成的授权码 ,不是其他的啥密码,公司这个问题就是很久没解决,今天算是交给新人的我了。一直跟我说的是客户说密码没错,我也是验证了好久才确定就是授权码的问题,客户重新开了个账号才好

2,用户名问题,我自己搭建的测试环境用新账号发邮件后是没问题的,但是回到公司的系统上发的时候,还是365问题,于是只能去debug一堆代码了,头疼。d着d着我才想起来一件事,用户名必须是完整的邮箱账号啊,公司配置的连域名都没带,我还按着系统的错误去debug了,噗,改正之后,终于是可以发送成功了。看迷糊了,哈哈。

相关推荐
信码由缰15 小时前
Spring Boot 面试问题
spring boot·后端·面试
梵得儿SHI15 小时前
(第十篇)Spring AI 核心技术攻坚全梳理:企业级能力矩阵 + 四大技术栈攻坚 + 性能优化 Checklist + 实战项目预告
java·人工智能·spring·rag·企业级ai应用·springai技术体系·多模态和安全防护
一路向北⁢15 小时前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(三)
java·spring boot·后端·sse
qq_2975746715 小时前
SpringBoot项目长时间未访问,Tomcat临时文件夹被删除?解决方案来了
spring boot·后端·tomcat
摇滚侠15 小时前
macbook shell 客户端推荐 Electerm macbook 版本下载链接
java·开发语言
程序员布吉岛15 小时前
Java 后端定时任务怎么选:@Scheduled、Quartz 还是 XXL-Job?(对比 + 避坑 + 选型)
java·开发语言
是阿楷啊15 小时前
Java大厂面试场景:音视频场景中的Spring Boot与微服务实战
spring boot·redis·spring cloud·微服务·grafana·prometheus·java面试
知无不研15 小时前
lambda表达式的原理和由来
java·开发语言·c++·lambda表达式
逍遥德15 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring
笨蛋不要掉眼泪15 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap