JavaMail连接Office 365使用XOAUTH2身份认证

本文详细介绍了微软关闭基本身份认证后,如何使用OAuth2.0身份验证来收发IMAP邮件,特别是针对outlook.office365.com的邮件服务器。通过JavaMail 1.5.5及更高版本,展示了配置OAuth2.0令牌进行IMAP收件的代码示例,同时讨论了不同OAuth2授权模式的应用场景。此外,还提供了获取OAuth2访问令牌的代码片段,并给出了相关参考资料。

一、微软关闭“基本身份认证”对使用smtp、imap、pop收发邮件的影响

在这里插入图片描述


通过上述文档可以明确:

  1. 本次微软关闭“基本身份认证”,只影响IMAP、POP收件,不影响SMTP发件。
  2. IMAP、POP原本通过“基本身份认证”,现在要使用“OAuth2.0 身份认证”。
二、javamail对OAuth2支持的官方描述:

https://javaee.github.io/javamail/OAuth2

在这里插入图片描述

可见javamail不支持POP传输OAuth2令牌,故只能使用IMAP协议进行收件
JavaMail 1.5.5 and later
:::tips
Properties props = new Properties();
props.put(“mail.imap.ssl.enable”, “true”); // required for Gmail
props.put(“mail.imap.auth.mechanisms”, “XOAUTH2”);
Session session = Session.getInstance(props);
Store store = session.getStore(“imap”);
store.connect(“imap.gmail.com”, username, oauth2_access_token);
:::
JavaMail 1.5.2 and later
:::tips
Properties props = new Properties();
props.put(“mail.imap.ssl.enable”, “true”); // required for Gmail
props.put(“mail.imap.sasl.enable”, “true”);
props.put(“mail.imap.sasl.mechanisms”, “XOAUTH2”);
props.put(“mail.imap.auth.login.disable”, “true”);
props.put(“mail.imap.auth.plain.disable”, “true”);
Session session = Session.getInstance(props);
Store store = session.getStore(“imap”);
store.connect(“imap.gmail.com”, username, oauth2_access_token);
:::

三、OAuth2的授权模式

由于授权代码流方式,需要弹出一个授权页面让用户授权,然后需要提过一个重定向的接口接收授权码。我们系统不方便进行这种处理。客户端凭据授予流据了解,不能用于发送邮件,只可用于收件(Microsoft的outlook.office365.com邮箱,但我们系统基于smtp协议进行发件,所以发件不在此次影响范围内,无需处理,所以使用客户端模式。

四、修改收件接口使用OAuth2认证

关键代码说明

  1. 判断是否使用imap协议从outlook.office365.com邮件服务器拉取邮件,并获取token

image.png

  1. 如果是,则设置相关session参数,并传递token,否则就使用密码。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值