背景:公司里有eHR系统,有网域,IBM Lotus Notes邮件系统,新人入职会在eHR系统里提前建好档案,网域帐号、邮箱帐号均会在入职前提前建好,因为邮箱帐号是晚于eHR建档的,因此在eHR建档时邮箱地址都是没有维护的,即使有维护,也可能维护是员工的个人邮箱,需要统一维护成公司的邮箱地址。

公司人资部虽然有要求员工自行维护个人信息,包括邮箱地址,但是收效甚微,因此才想到能否实现从LDAP中直接获取邮箱地址信息并与eHR同步?

我咨询了一下公司的邮件系统负责人,Notes有没有接口可以查到每个人的邮箱,他说应该是可以的,因为反垃圾邮件系统就设过,里面有设服务器和端口,既然反垃圾邮箱系统可以从Notes里获邮箱地址,其他系统应该也可以。

接下来就搜索C#访问LDAP,这方面的资料还算不少,网上找一找,很容易写,大致就是以下几行,查询的结果就在result变量里。

DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://ip:port", @"user", "password", AuthenticationTypes.Anonymous);

DirectorySearcher searcher = new DirectorySearcher(directoryEntry)
{
    Asynchronous = false,
    CacheResults = false,
    ClientTimeout = new TimeSpan(0, 0, 1),
    Filter = "((cn=" + empName + "))"
}; searcher.PropertiesToLoad.AddRange(new[] { "cn", "sn", "displayName", "mail", "department", "company" });
SearchResultCollection result = searcher.FindAll();

  

有几个地方需要注意

1、LDAP后面的地址错误,会提示”该服务器不可操作“

2、验证方式不对,会提示”出现了一个协议错误"或者“该服务器不可操作”,我选的是AuthenticationTypes.Anonymous匿名方式,这种方式用户名和密码是可以不用输的。

3、Filter就是要查找的条件了,怎么写这个条件,可以下载一款软件,LDAPSoft LDAP Browser,用这个就可以很清楚的看到公司 LDAP的层次架构,知道该如何下条件了。

以上代码在测试工程中调试,很快就成功了,接下来将此段代码封装成web service,然后就利用上一章节所讲的Sql Server里Call Web service的技术,写一个Job,循环获取公司里邮箱为空或者非公司邮箱地址的人员,调用该接口实现同步,这样就能实现eHR同LDAP的邮箱地址同步了。

因为公司里会有员工同名的问题,Notes里是可以将工号输入进去的,因为工号是唯一的,按工号找邮箱地址就会非常准确了。

在用.net写web service时,访问时报错,提示“因 URL 意外地以“/****”结束,请求格式无法识别。”,这个错误只要在web.config配置下就可以了

web.config文件中的 <system.web> 节点下加入:
<webServices>
    <protocols>
        <add name= "HttpPost"/>
        <add name= "HttpGet"/>
    </protocols>
</webServices>

不过这段落是有风险的,如果是查询的Web Service还好,但是如果是更新或删除类的web service,被人知道后可以随意操作乱改你的数据。

eHR自动同步获取LDAP中的邮箱地址的更多相关文章

  1. 如何使用JAVA语言抓取某个网页中的邮箱地址

    现实生活中咱们常常在浏览网页时看到自己需要的信息,但由于信息过于庞大而又不能逐个保存下来. 接下来,咱们就以获取邮箱地址为例,使用java语言抓取网页中的邮箱地址 实现思路如下: 1.使用Java.n ...

  2. 制作一个文档同步工具,自动同步到gitee中。。。

    之所以要做这个工具是为了让自己可以随时用电脑时能记录日常工作或生活.一般只需要简单记录下就行了.这样我在家里的和公司里的记录都能同步看到. 这样后期整理的时候看到几个关键词就能想起来具体的事情,有的也 ...

  3. php获取内容中第一张图片地址

    $note = '<img src="http://images.xxx.com/article/cover/201601/20/141539161273.png?imageView2 ...

  4. ARPSpoofing教程(二) - 获取网络设备中的详细地址信息

    WinPcap中文API  http://www.ferrisxu.com/WinPcap/html/index.html 1: #include"pcap.h" 2: #incl ...

  5. iOS webview 获取html中的图片地址

    //js代码,声明1个数组,对img 进行遍历,采用,分割多个url NSString * getAllImages = @"var str = new Array();" &qu ...

  6. asp.net mvc 注册中的邮箱激活功能实现(一)

    基本流程图 注册页面就不再写出,现在将发送邮件的代码粘贴出来 public ActionResult SendEmial() { ; string validataCode = System.Guid ...

  7. asp.net mvc 注册中的邮箱激活功能实现

    基本流程图 注册页面就不再写出,现在将发送邮件的代码粘贴出来   public ActionResult SendEmial() { ; string validataCode = System.Gu ...

  8. 如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇

    Xamarin 作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台.AppGallery Connect(以下简称 AGC)也在逐步的支持 Xamarin 的 SDK.认证服务也是 ...

  9. IOS 获取通讯录中信息

    获取通讯录中信息 一. 我们设置一个ABAddressBookRef类型的属性addressBook. 二. 要获得通讯录中的信息,我们需要获取访问通讯录的权限. 在运行下面的获取权限的方法的时候,系 ...

随机推荐

  1. 001-mock.js安装使用

    一.基础 1.1.安装 //安装 npm install mockjs --save 1.2.使用 // 使用 Mock var Mock = require('mockjs') Mock.mock( ...

  2. python中的下划线

    在学习Python的时候,会不理解为什么在方法(method)前面会加好几个下划线,有时甚至两边都会加.在Python中下划线还具有 private 和 protected 类似的访问权限作用,下面我 ...

  3. PHP 类名::class含义

    自 PHP 5.5 起,关键词 class 也可用于类名的解析. 使用 ClassName::class 可以获取一个字符串,包含了类 ClassName 的完全限定名称.这对使用了命名空间的类尤其有 ...

  4. 如何在Android的ListView中构建CheckBox和RadioButton列表(支持单选和多选的投票项目示例)

    引言 我们在android的APP开发中有时候会碰到提供一个选项列表供用户选择的需求,如在投票类型的项目中,我们提供一些主题给用户选择,每个主题有若干选项,用户对这些主题的选项进行选择,然后提交. 本 ...

  5. mac nginx compile

    编译 ./configure \ --prefix=/usr/local/services/nginx-1.14.0 \ --with-openssl=/Users/gavin/Downloads/s ...

  6. 2017.11.11日后matlab统一过期需激活解决办法

    转载自此处: 在matlab安装目录中找到license目录,并创建license.lic文件,然后把以下内容copy到文件中,重启matlab. INCREMENT Aerospace_Blocks ...

  7. webpack使用七

    产品阶段的构建 目前为止,我们已经使用webpack构建了一个完整的开发环境.但是在产品阶段,可能还需要对打包的文件进行额外的处理,比如说优化,压缩,缓存以及分离CSS和JS. 对于复杂的项目来说,需 ...

  8. [转]kafka介绍

    转自 https://www.cnblogs.com/hei12138/p/7805475.html kafka介绍 1.1. 主要功能 根据官网的介绍,ApacheKafka®是一个分布式流媒体平台 ...

  9. <5>Lua多返回值和require模块

    1.多返回值 --1: 一个lua函数可以返回多个返回值: --2: 定义多个变量来接受多返回值 --3: lua的unpack函数,解开表里的单个的值; 结果 2.require模块 --1: 第一 ...

  10. PHP运行脚本

    PHP运行脚本 php.exe -f "php文件" php.exe -r "php代码" 例如:在cmd中 C:\Users\Administrator.SK ...