一次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邮箱接口的开发经历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绝地求生大逃杀手机令牌如何解除?绝地求生
- 下一篇: 2021光遇巫师帽会复刻返场吗 巫师帽什