Java 讀取Exchange server 未讀郵件數量
阿新 • • 發佈:2019-01-08
1、準備工作
一、開啟exchange shell,使用如下命令提升administrator賬號為exchange超級管理,讓它具有對其他使用者操作的許可權
New-ManagementRoleAssignment -Name:impersonationAssignmentName -Role:ApplicationImpersonation -User:administrator
注:如果以上命令執行失敗,請嘗試先執行下面這條命令,在執行上面的
Remove-ManagementRoleAssignment "impersonationAssignmentName"
二、exchange server 可以進行web訪問
https://xxxx.com/EWS/Exchange.asmx
https://xxxx.com/owa
三、新增郵箱賬戶
新增多個郵箱賬戶,同時給發這幾個使用者分別傳送不同數量的郵件,記得不要檢視,因為要讀取未讀郵件
2、關鍵程式碼
package com.codesql.utils;
import java.net.URI;
import microsoft.exchange.webservices.data.ConnectingIdType;
import microsoft.exchange.webservices.data.ExchangeCredentials ;
import microsoft.exchange.webservices.data.ExchangeService;
import microsoft.exchange.webservices.data.ExchangeVersion;
import microsoft.exchange.webservices.data.Folder;
import microsoft.exchange.webservices.data.ImpersonatedUserId;
import microsoft.exchange.webservices.data.WebCredentials;
import microsoft.exchange .webservices.data.WellKnownFolderName;
public class ReaderExchanageUnreadMail {
// aduser=administrator
// adpass=密碼
// addomain=域的名字
// [email protected].com
// uri=https://mail.xxx.com/EWS/Exchange.asmx
// sid 被查詢使用者的名稱
public String getCount(String aduser, String adpass, String addomain, String uri, String suffix, String sid) throws Exception {
String count = "0";
ExchangeService service = new ExchangeService(
ExchangeVersion.Exchange2010_SP1);
ExchangeCredentials credentials = new WebCredentials(aduser, adpass,addomain);
//ExchangeCredentials credentials = new WebCredentials("bbbb", "Aa123456","fr");
service.setCredentials(credentials);
ImpersonatedUserId other= new ImpersonatedUserId(ConnectingIdType.SmtpAddress, sid+suffix);
service.setImpersonatedUserId(other);
service.setUrl(new URI(uri));
//service.setTraceEnabled(true);
// 服務地址
try {
Folder inbox = Folder.bind(service, WellKnownFolderName.Inbox);
// 收件箱
// System.out.println("未讀郵件數:" + inbox.getUnreadCount());
count = inbox.getUnreadCount() + "";
} catch (Exception e) {
// e.printStackTrace();
}
return count;
}
}
當然,為了方便呼叫,具體程式碼我已經打包成jar,你可以在文章末尾的連結中下載
3、Reum.jar的使用
public class PropertiesParam {
private String aduser;
private String adpass;
private String addomain;
private String uri;
private String suffix;
public PropertiesParam(String aduser, String adpass, String addomain,
String uri, String suffix) {
super();
this.aduser = aduser;
this.adpass = adpass;
this.addomain = addomain;
this.uri = uri;
this.suffix = suffix;
}
// 省略 get/set
// toSting();
}
給ajax呼叫的方法
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String identify = "0"; // 未讀郵件數量
String sid = request.getParameter("sid"); // sid 郵箱使用者名稱稱
ReaderExchanageUnreadMail reum = new ReaderExchanageUnreadMail();
try {
identify = reum.getCount(initparam.getAduser(), initparam.getAdpass(),initparam.getAddomain()
, initparam.getUri(), initparam.getSuffix() , sid);
System.out.println("count " + identify);
} catch (Exception e) {
e.printStackTrace();
}
try {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print(identify);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}