前言
本来是想写一下做这个需求的心路历程的,奈何文笔实在太烂,所以还是废话不多说,直接上代码。
正文
使用的COM组件为com.jacob,maven信息如下:
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.20</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/resources/lib/jacob.jar</systemPath>
</dependency>
com.jacob具体的使用方法可以网上找一下,很全面。
运行程序的机器上安装了Outlook,使用的是Microsoft 365的版本,然后需要一个能登陆的账号,并一直保持登陆的状态。
java完整代码:
package org.example;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
public class OutlookEmailFetcher {
public static void main(String[] args) {
// 创建Outlook应用程序对象
ActiveXComponent outlook = new ActiveXComponent("Outlook.Application");
// 获取Outlook会话对象
Dispatch session = Dispatch.call(outlook, "Session").toDispatch();
// 获取所有的联系人组对象
Dispatch addressLists = Dispatch.call(session, "AddressLists", "All Distribution Lists").toDispatch();
// 获取联系人组别名对应的联系人组对象
Dispatch addressEntries = Dispatch.call(addressLists, "AddressEntries", "China NB").toDispatch();
// 获取联系人组成员对象
Dispatch distributionList = Dispatch.call(addressEntries, "GetExchangeDistributionList").toDispatch();
// 获取联系人组成员列表
Dispatch members = Dispatch.call(distributionList, "GetExchangeDistributionListMembers").toDispatch();
int count = Dispatch.call(members, "Count").getInt();
// 遍历列表并获取详细邮箱信息
for (int i = 1; i <= count; i++) {
Dispatch member = Dispatch.call(members, "Item", i).toDispatch();
String name = Dispatch.call(member, "Name").getString();
Dispatch contactItem = Dispatch.call(member, "GetExchangeUser").toDispatch();
String email = Dispatch.call(contactItem, "PrimarySmtpAddress").getString();
System.out.println("成员名称: " + name);
System.out.println("成员邮箱: " + email);
System.out.println("-------------");
}
// 释放COM对象并关闭Outlook应用程序
if (outlook != null) {
Dispatch.call(outlook, "Quit");
}
}
}
顺利的话,使用以上代码就可以获取到Outlook联系人组成员的邮箱地址了。
参考资料
可以参考微软的VBA的官方文档:
链接: link