惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
G
Google Developers Blog
B
Blog
Engineering at Meta
Engineering at Meta
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
The Cloudflare Blog
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
雷峰网
雷峰网
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
量子位
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
H
Help Net Security
Help Net Security
Help Net Security
P
Palo Alto Networks Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Troy Hunt's Blog
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
Apple Machine Learning Research
Apple Machine Learning Research
Scott Helme
Scott Helme
N
News | PayPal Newsroom
AWS News Blog
AWS News Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
腾讯CDC
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
TaoSecurity Blog
TaoSecurity Blog
GbyAI
GbyAI
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
Docker

博客园 - TanSea

VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - 构建篇 VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - Gogs篇 VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - Docker篇 VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - Jenkins篇 VMware虚拟机下Linux系统(Ubuntu桌面版)微服务环境搭建 - 准备篇 Sql Server 分批复制数据 Sql Server 查询数据库表结构 MAUI Blazor+MASA开发安卓应用学习笔记 - 设置图标和初始屏幕 MAUI Blazor+MASA开发安卓应用学习笔记 - 设置APP格式、名称、版本信息 MAUI Blazor+MASA开发安卓应用学习笔记 - 新建项目和发布 一道SQL面试题的解题思路 Windows10设置默认简体美式键盘输入法 C# 历史版本特性变更(更新到C# 11) SQL Server Report Builder RDLC按记录数分页 SQL Server分页查询进化史 一次.NET项目反编译的实战经验(WinForm) 点石成金-访客至上的网站设计秘笈 读书笔记 Windows7使用无线网卡建立WiFi热点 程序员的职业素养 读书笔记 - 第14章 辅导、学徒期与技艺
一次Exchange邮箱接口的开发经历
TanSea · 2020-04-27 · via 博客园 - TanSea

第一次接触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