1. 程式人生 > >Java 讀取Exchange server 未讀郵件數量

Java 讀取Exchange server 未讀郵件數量

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();
        }

    }