javamail 访问共享邮箱

Posted

技术标签:

【中文标题】javamail 访问共享邮箱【英文标题】:javamail access to a shared mailbox 【发布时间】:2011-10-31 08:10:29 【问题描述】:

我正在尝试编写一个 Java 应用程序,该应用程序将访问一个额外的共享邮箱来阅读电子邮件和执行其他活动。我在阅读自己的收件箱(或其文件夹和内容)时没有问题,但很难找到有关如何访问(并最终解析/读取)共享邮箱的信息。

【问题讨论】:

您使用的是哪种邮件协议? 如果您谈论的是 Exchange 上的共享邮箱,您可能会发现 JavaMail/IMAP 不会有太大帮助。您可能需要考虑使用一些处理 Exchange 的 .NET 库。 【参考方案1】:

我正在执行以下操作,对我来说效果很好

properties = System.getProperties();
properties.setProperty("mail.imaps.auth.plain.disable", "true");
properties.setProperty("mail.imaps.auth.ntlm.disable", "true");
Session session = Session.getInstance(properties, null);
store = session.getStore("imaps");
store.connect("HOST", PORT, "DOMAIN\\USER\\SHAREDACCOUNT","pwd");

这里 DOMAIN\\USER\\SHAREDACCOUNT 会是这样 假设电子邮件帐户是 tarun@abc.com 那么 abc\\tarun\\shared_MB

您还必须输入 tarun@abc.com 帐户的密码。

【讨论】:

【参考方案2】:

在其他答案的帮助下,我想出了以下解决方案,适用于 com.sun.mail:javax.mail:1.6.2

Properties props = new Properties();
props.setProperty("mail.imaps.auth.mechanisms", "LOGIN");
Session session = Session.getInstance(props);
Store store = session.getStore("imaps");
store.connect("outlook.office365.com", 993, "user@xyz.com\\shared_account_alias", "user_password");

使用 javax.mail:mail:1.4.7 以下代码有效:

Properties props = new Properties();
props.setProperty("mail.imaps.auth.plain.disable", "true");
Session session = Session.getInstance(props);
Store store = session.getStore("imaps");
store.connect("outlook.office365.com", 993, "user@xyz.com\\shared_account_alias", "user_password");

shared_account_alias 不是电子邮件地址。

最终我找到了一种更标准的访问共享邮箱的方法:

Properties props = new Properties();
props.setProperty("mail.imaps.sasl.enable", "true");
props.setProperty("mail.imaps.sasl.authorizationid", "shared_account_alias");
Session session = Session.getInstance(props);
Store store = session.getStore("imaps");
store.connect("outlook.office365.com", 993, "user@xyz.com", "user_password");

【讨论】:

props.setProperty("mail.imaps.sasl.authorizationid", "shared_account_alias@xyz.com"); 的最后一种方法对我有用。【参考方案3】:

Tarun 给出的解决方案有效。但要注意使用共享帐户的别名,而不是共享帐户的实际电子邮件地址。 所以实际的格式是: store.connect(DOMAIN, "USER@xyz.com\SHARED_ACCOUNT_ALIAS","USER_PASSWORD");

【讨论】:

以上是关于javamail 访问共享邮箱的主要内容,如果未能解决你的问题,请参考以下文章

Outlook共享邮箱 - 访问收件箱的特定子文件夹的多个文件夹的详细信息

使用 C# 获取共享邮箱的用户

Exchange Server 2016管理系列课件18.创建和管理共享邮箱

如何实现session共享

session原理及实现共享

Enable message copy在Exchange 2016以后版本已经可用