使用 Javamail 访问 Microsoft Exchange 邮箱(IMAP、MS Exchange)

2024-04-06

我需要通过 IMAPS JavaMail 连接到 Microsoft Exchange Server。首先,我得到了:

A1 NO AUTHENTICATE failed.
javax.mail.AuthenticationFailedException: AUTHENTICATE failed.

我的调试器中出现异常。

然后,我禁用了一些身份验证协议:

imapProps.setProperty("mail.imaps.auth.plain.disable", "true");
imapProps.setProperty("mail.imaps.auth.ntlm.disable", "true");
imapProps.setProperty("mail.imaps.auth.gssapi.disable", "true");

这是我收到的新异常(我已附上整个日志):

DEBUG: setDebug: JavaMail version 1.4.4
DEBUG: getProvider() returning javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc]
DEBUG: mail.imap.fetchsize: 16384
DEBUG: mail.imap.statuscachetimeout: 1000
DEBUG: mail.imap.appendbuffersize: -1
DEBUG: mail.imap.minidletime: 10
DEBUG: disable AUTH=PLAIN
DEBUG: disable AUTH=NTLM
DEBUG: enable STARTTLS
DEBUG: trying to connect to host "host.domain.com", port 993, isSSL true
* OK The Microsoft Exchange IMAP4 service is ready.
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=NTLM AUTH=GSSAPI AUTH=PLAIN UIDPLUS CHILDREN IDLE  NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAP: AUTH: NTLM
DEBUG IMAP: AUTH: GSSAPI
DEBUG IMAP: AUTH: PLAIN
DEBUG: protocolConnect login, host=host.domain.com, [email protected] /cdn-cgi/l/email-protection,  password=<non-null>
A1 LOGIN [email protected] /cdn-cgi/l/email-protection password
A1 NO LOGIN failed.
DEBUG: trying to connect to host "host.domain.com", port 993, isSSL true
* OK The Microsoft Exchange IMAP4 service is ready.
A0 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 AUTH=NTLM AUTH=GSSAPI AUTH=PLAIN UIDPLUS CHILDREN IDLE NAMESPACE LITERAL+
A0 OK CAPABILITY completed.
DEBUG IMAP: AUTH: NTLM
DEBUG IMAP: AUTH: GSSAPI
DEBUG IMAP: AUTH: PLAIN
DEBUG: protocolConnect login, host=host.domain.com, [email protected] /cdn-cgi/l/email-protection, password=<non-null>
A1 LOGIN [email protected] /cdn-cgi/l/email-protection password
A1 NO LOGIN failed.
javax.mail.AuthenticationFailedException: LOGIN failed.
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:660)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at ConnectMail.connectMail(ConnectMail.java:63)
at Main.main(Main.java:9)

现在我收到“没有登录失败”异常。

这是我的完整代码:

Properties imapProps = new Properties();
imapProps.setProperty("mail.imaps.socketFactory.port", "993");
imapProps.setProperty("mail.imaps.starttls.enable", "true");
imapProps.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
imapProps.setProperty("mail.imaps.socketFactory.fallback", "false");
imapProps.setProperty("mail.imaps.auth.plain.disable", "true");
imapProps.setProperty("mail.imaps.auth.ntlm.disable", "true");
imapProps.setProperty("mail.imaps.auth.gssapi.disable", "true");
imapProps.setProperty("username", "[email protected] /cdn-cgi/l/email-protection");   
imapProps.setProperty("password", "password");

String host = "host.domain.com";
int port = Integer.parseInt("993");

Authenticator authenticator = new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("[email protected] /cdn-cgi/l/email-protection", "password");
    }
};

session = Session.getInstance(imapProps, authenticator);

session.setDebug(true);

Store store = session.getStore("imaps");

store.connect(host, "[email protected] /cdn-cgi/l/email-protection", "password");

您需要使用支持 NTLM 身份验证的较新版本的 JavaMail。最新版本是1.5.1 https://java.net/projects/javamail/pages/Home.

另外,请参阅此列表常见错误 http://www.oracle.com/technetwork/java/javamail/faq/index.html#commonmistakes.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Javamail 访问 Microsoft Exchange 邮箱(IMAP、MS Exchange) 的相关文章

  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • createImage(int width, int height) 的问题

    我有以下代码 作为游戏的一部分每 10 毫秒运行一次 private void gameRender if dbImage null createImage returns null if GraphicsEnvironment isHea
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • 如何在 Antlr4 中为零参数函数编写语法

    我的函数具有参数语法 如下面的词法分析器和解析器 MyFunctionsLexer g4 lexer grammar MyFunctionsLexer FUNCTION FUNCTION NAME A Za z0 9 DOT COMMA L
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 自托管 WCF REST 服务和基本身份验证

    我创建了一个自托管的 WCF REST 服务 带有 WCF REST Starter Kit Preview 2 中的一些额外内容 这一切工作正常 我现在正在尝试向服务添加基本身份验证 但我在 WCF 堆栈中遇到了一些相当大的障碍 这阻止了
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • Haskell 中的 xor 和 or 有什么区别

    So if xor回报True当且仅当其操作数之一恰好是True这样 xor Bool gt Bool gt Bool xor True True False xor True False True xor False True True
  • 模板函数中的输出向量

    这一段代码报错 template
  • 来自 Unity 配置文件的 RegisterType

    我正在从 Prism 4 迁移到 Prism 7 1 我似乎找不到已从最新 Prism 版本中删除的ConfigureContainer 方法 过去 我曾使用这种方法从文件系统加载Unity配置 对于最新版本的 Prism 库 这似乎是不可
  • isdigit 无法正常工作

    我试图通过迭代整个字符串并输出整数来测试字符串是否包含整数 我的方法涉及将字符串转换为 c string atoic 字符串 然后使用测试它是否是整数isdigit功能 由于某种未知的原因 isdigit尽管函数遇到整数 但它返回 fals
  • 如何选择要在 Ruby 中动态包含的模块版本?

    我正在编写一个小型 Rub y 命令行应用程序 它使用fileutils来自文件操作的标准库 根据用户调用应用程序的方式 我想包括FileUtils FileUtils DryRun or FileUtils Verbose Since i
  • ggplot2:在右侧为一个变量创建第二个 y 轴

    我有一个数据框 在同一时间范围内包含 3 个不同的变量 前两个变量具有相同的比例 股票指数值 可以用 y 轴来说明 第三个变量是利率 范围仅为 0 到 7 因此我专注于在图的右侧创建一个额外的 y 轴来说明它 但经过两天的尝试和失败后 我在
  • 使用powershell获取csv文件中的特定单元格值

    我是 powershell 的新手 不经常使用它 我需要使用 powershell 从 csv 文件输出单元格 A5 的值 我的文件 col1 col2 col3 col4 1002 1005 1006 1007 需要 A1 单元格中的值
  • 无法使用 getDeclaredFields() 检索 Scala 类的字段

    我正在尝试将 Java 库 JOhm 与 Scala 一起使用 并注意到当该库尝试使用以下内容读取我的 Scala 类的字段时它会失败model getClass getDeclaredFields 然后我决定尝试在 Scala 解释器中用
  • 如何在输入按钮中的访问键下划线

    我有一个按钮 我想在访问密钥字母下划线 u u 不起作用 并且C 818 C 改变字体 应该是verdana
  • 带有自定义参数的 Html.DropDownListFor()

    我想在 HTML 帮助程序中添加扩展方法来生成这样的选择和选项
  • 如何使用默认集合和数据创建 Mongo Docker 镜像?

    我需要这里的支持来构建我自己的 mongo docker 镜像 我有一个脚本列表 用于创建数据并将其插入 MongoDB 这些脚本应在我的 Dockerfile 中调用 以提供具有默认集合和数据的 docker 映像 这是我的 Docker
  • 具有依赖预设参数的函数

    请考虑简单的功能 def fun x y param1 10 param2 param1 3 do something Where param1 and param2不应是必需的 但可以由用户设置 如果param2未设置 值取决于param
  • EaselJS - 检测碰撞的最佳方法

    我正在尝试为我的 easelJS 小应用程序找到一种碰撞检测的好方法 我刚刚使用 createjs Shape 创建了 2 个矩形 但是创建一个矩形形状后 API 不让我知道矩形的宽度和高度 我不知道为什么 EaselJS Shape 有一
  • 使用 CSS 动态清除浮动

    我正在尝试用 CSS 创建一个 3 列的博客布局 对于每个新帖子 都会在容器 div 内动态添加一个新的 div 但是 由于我无法手动放置清除元素 因此我在清除浮动时遇到了麻烦 现在看起来是这样的 http jsfiddle net DZA
  • 如何在 Spring Boot 中从 RESTful 控制器返回 HTML 页面?

    我想从控制器返回一个简单的 HTML 页面 但我只得到文件的名称而不是其内容 为什么 这是我的控制器代码 RestController public class HomeController RequestMapping public St
  • 如何使用 git 撤消推送的提交?

    我在远程存储库中有一个项目 与本地存储库 开发 和服务器存储库 产品 同步 我一直在进行一些已提交的更改 这些更改已推送到远程并从服务器中拉出 现在 我想撤消这些更改 所以我可以git checkout到更改之前的提交并提交新的更改 但我猜
  • 按 ProductFlavor 和 buildType 划分的 Gradle SourceSets

    EDIT口味和路径 目前我有 sourceSets whenObjectAdded sourceSet gt def sourceData rootProject ext sourceSet name sourceSet java srcD
  • ASP.NET身份重置密码

    如何在新的 ASP NET Identity 系统中获取用户的密码 或者在不知道当前密码的情况下如何重置 用户忘记密码 或者在不知道当前密码的情况下如何重置 用户忘记密码 如果您想使用 UserManager 更改密码 但不想提供用户的当前
  • Leafletjs GeoJSON 层不适用于来自自然地球的地图数据

    我正在使用 leafletjs 使用 OSM 瓷砖绘制地理地图 我使用以下 GeoJSON 作为地图层http code highcharts com mapdata 1 0 0 custom world js http code high
  • 使用 Javamail 访问 Microsoft Exchange 邮箱(IMAP、MS Exchange)

    我需要通过 IMAPS JavaMail 连接到 Microsoft Exchange Server 首先 我得到了 A1 NO AUTHENTICATE failed javax mail AuthenticationFailedExce