日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

一次Exchange邮箱接口的开发经历

發布時間:2023/12/15 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 一次Exchange邮箱接口的开发经历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一次接觸Exchange郵箱,資料翻了很多,也踩過一些坑。這里把整個開發經過記錄一下:

使用Exchange提供的COM組件編寫接口

毫無疑問,直接調用Exchange的接口是最簡單暴力的,但是在實際開發中發現了一些問題不得不改變思路。

1、網上流傳這個COM組件并不是太穩定,而且針對C#一直存在一些BUG,建議用VB編碼

2、Exchange只能安裝在服務器版本的Windows上,而服務器的文件又是只進不出的,所以拿不到COM組件,就算拿到了也不好測試。

使用PowerShell來操作Exchange

使用PowerShell比COM組件要多出一步,但是畢竟它們都是微軟的產品,在穩定性上還是可以的。

using (PowerShell powerShell = PowerShell.Create())
{
    PSCommand command = new PSCommand();
    command.AddCommand("Enable-Mailbox");
    command.AddParameter("identity", identity);
    command.AddParameter("Confirm", false);
    powerShell.Commands = command;

    using (powerShell.Runspace = GetRunspace())
    {
        Collection<PSObject> result = powerShell.Invoke();
    }
}
private Runspace GetRunspace()
{
    RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
    PSSnapInException snapInException = new PSSnapInException();
    PSSnapInInfo snapinInfo = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException);
    Runspace runspace = RunspaceFactory.CreateRunspace(rsConfig);
    runspace.Open();
    return runspace;
}

以啟用郵箱為例,代碼并不復雜,主要由2個部分組成:

1、添加Command:操作Exchange的指令和參數

2、添加Runspace:這里主要是添加SnapIn,因為在默認環境下,PowerShell是不支持Exchange指令的

問題一:

新建個控制臺程序測試一下,然后果然就報錯了。從上面代碼可以看出來“E2010”,可是我操作的Exchange是2016版本,嘗試改成“E2016”,然后還是報錯了。

然后從搜索引擎查一下,改成“Microsoft.Exchange.Management.PowerShell.Admin”,仍然報錯。

實在沒有辦法了,在服務器上查找關鍵字“Microsoft.Exchange.Management.PowerShell”,搜索到一個叫“Microsoft.Exchange.Management.PowerShell.SnapIn”的DLL,嘗試了一下操作成功了。

附上各版本SnapIn的參數:

Exchange 2007:Microsoft.Exchange.Management.PowerShell.Admin

Exchange 2010:Microsoft.Exchange.Management.PowerShell.E2010

Exchange 2013 &2016:Microsoft.Exchange.Management.PowerShell.SnapIn

問題二:

核心代碼測試完成,集成到WebServices去,在服務器本地再測試一下,報錯。

第一想法是不是代碼搞錯了,檢查了一下結果和控制臺程序的代碼一模一樣,再測試,仍然報錯。切換到控制臺程序再測試,成功了。

后來發現是權限問題,在網站上調用PowerShell是屬于完程調用,需要進行身份驗證。

遠程調用PowerShell來操作Exchange

然后就進入到了一個不斷測試代碼的過程,具體的經過我也不太記得了,大致就是用WSManConnectionInfo建議一個遠程通信協議,還需要給WinRM添加TCP端口,需要給PowerShell開通遠程操作等等。

最終給我的結果就是拒絕訪問,我懷疑服務器本身也做了一些訪問的限制。所以這一塊我也只能放棄了,看看還有什么其他的思路。

具體可以參考一下:https://www.cnblogs.com/renzh/p/AD-Exchange.html

WebServices調用本地代碼,實現PowerShell操作Exchange

之前用控制臺程序測試過是成功的,也就是說我只要把代碼放在本地這種操作是可以實現的。比如說:用WebServices來調用控制臺程序或是Windows服務。

最終還是在本地添加COM+組件實現了功能:https://www.cnblogs.com/opps/p/3792787.html

總結

以上是生活随笔為你收集整理的一次Exchange邮箱接口的开发经历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。