推送联系人以交换用户

我正在使用Exchange 2003,Outlook 2007/2003。 有没有办法将一组联系人推送给用户? 我宁愿不使用GAL,我真的不想发送csv文件为他们导入。

任何帮助表示赞赏。

编辑:

如果有人有一个很好的pipe理移动员工联系的方法,我也很乐意听到。

这是一个非常震憾的VBScript我一直用来推动从一个用户到文本文件中提供的用户列表的联系人的子文件夹:

snServername = "exchange" mnMailboxname = "user.to.copy.from" mndestmailbox = "" Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile _ ("c:\scripts\users.txt", ForReading) Do Until objTextFile.AtEndOfStream mndestmailbox = objTextFile.Readline wscript.echo "" wscript.echo mndestmailbox SourceURL = "http://" & snServername & "/exchange/" & mnMailboxname & "/contacts/folder to copy/" DestinURL = "http://" & snServername & "/exchange/" & mndestmailbox & "/contacts/folder to copy/" set req = createobject("microsoft.xmlhttp") set CDOSession = CreateObject("MAPI.Session") strProfile = snServername & vbLf & mnMailboxname CDOSession.Logon "",,, False,, True, strProfile set RDOSession = CreateObject("Redemption.RDOSession") RDOSession.MAPIOBJECT = CDOSession.MAPIOBJECT set cfCalendarFolder1 = RDOSession.GetSharedDefaultFolder(mndestmailbox, 10) For Each fld In cfCalendarFolder1.Folders If fld.name = "folder to copy" Then Set cfCalendarFolder = fld End if next colbblob = Collabblobget() wscript.echo colbblob QueryMailbox(colbblob) wscript.echo "Done" Loop Sub QueryMailbox(colbblob) strQuery = "<?xml version=""1.0""?><D:searchrequest xmlns:D = ""DAV:"" xmlns:R=""http://schemas.microsoft.com/repl/""><R:repl><R:collblob>" & colbblob & "</R:collblob></R:repl>" strQuery = strQuery & "<D:sql>SELECT ""DAV:href"", ""urn:schemas:httpmail:subject"", ""http://schemas.microsoft.com/mapi/proptag/x0fff0102"",""http://schemas.microsoft.com/repl/repl-uid"" " strQuery = strQuery & " FROM scope('shallow traversal of """ strQuery = strQuery & SourceURL & """') Where NOT ""urn:schemas:calendar:instancetype"" = 2 AND NOT ""urn:schemas:calendar:instancetype"" = 3 AND ""DAV:ishidden"" = False AND ""DAV:isfolder"" = False " strQuery = strQuery & "</D:sql></D:searchrequest>" req.open "SEARCH", SourceURL, false, "", "" req.setrequestheader "Content-Type", "text/xml" req.setRequestHeader "Translate","f" req.send strQuery If req.status >= 500 Then wscript.echo "Status: " & req.status wscript.echo "Status text: An error occurred on the server." ElseIf req.status = 207 Then wscript.echo "Status: " & req.status wscript.echo "Status text: " & req.statustext set oResponseDoc = req.responseXML set oNodeList = oResponseDoc.getElementsByTagName("d:collblob") For i = 0 To (oNodeList.length -1) set oNode = oNodeList.nextNode colblob = oNode.Text Collabblobset(colblob) Next set idNodeList = oResponseDoc.getElementsByTagName("f:x0fff0102") set replidNodeList = oResponseDoc.getElementsByTagName("d:repl-uid") set replchangeType = oResponseDoc.getElementsByTagName("d:changetype") for id = 0 To (idNodeList.length -1) set oNode1 = idNodeList.nextNode set oNode2 = replidNodeList.nextNode set oNode3 = replchangeType.nextNode select case oNode3.text case "new" call Copyapt(Octenttohex(oNode1.nodeTypedValue),oNode2.text) case "delete" wscript.echo oNode3.text wscript.echo oNode2.text DeleteContact(oNode2.text) case "change" Wscript.echo "Change" call DeleteContact(oNode2.text) call Copyapt(Octenttohex(oNode1.nodeTypedValue),oNode2.text) end select next Else wscript.echo "Status: " & req.status wscript.echo "Status text: " & req.statustext wscript.echo "Response text: " & req.responsetext End If End Sub function Collabblobget() xmlreqtxt = "<?xml version='1.0'?><a:propfind xmlns:a='DAV:' xmlns:cp='" & SourceURL & "'><a:prop><cp:collblob/></a:prop></a:propfind>" req.open "PROPFIND", DestinURL, false, "", "" req.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8""" req.setRequestHeader "Depth", "0" req.setRequestHeader "Translate", "f" req.send xmlreqtxt set oResponseDoc = req.responseXML set oCobNode = oResponseDoc.getElementsByTagName("d:collblob") For i1 = 0 To (oCobNode.length -1) set oNode = oCobNode.nextNode Collabblobget = oNode.Text Next End function Sub Collabblobset(colblob) xmlstr = "<?xml version=""1.0""?>" _ & "<g:propertyupdate " _ & " xmlns:g=""DAV:"" xmlns:e=""http://schemas.microsoft.com/exchange/""" _ & " xmlns:dt=""urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/"" " _ & " xmlns:cp=""" & SourceURL & """ " _ & " xmlns:header=""urn:schemas:mailheader:"" " _ & " xmlns:mail=""urn:schemas:httpmail:""> " _ & " <g:set> " _ & " <g:prop> " _ & " <cp:collblob>" & colblob & "</cp:collblob> " _ & " </g:prop> " _ & " </g:set> " _ & "</g:propertyupdate>" req.open "PROPPATCH", DestinURL, False req.setRequestHeader "Content-Type", "text/xml;" req.setRequestHeader "Translate", "f" req.setRequestHeader "Content-Length:", Len(xmlstr) req.send(xmlstr) end sub Sub CopyApt(messageEntryID,ReplID) set objapt = CDOSession.GetMessage(messageEntryID) set objCopyapt = objapt.copyto(cfCalendarFolder.EntryID) objCopyapt.Unread = false objCopyapt.Fields.Add "0x8542", vbString, ReplID,"0820060000000000C000000000000046" objCopyapt.Update Set objCopyapt = Nothing wscript.echo objapt.subject end Sub Sub CopyContact(messageEntryID,ReplID) set objcontact = objSession.getmessage(messageEntryID) set objCopyContact = objcontact.copyto(pfPublicFolderID,objpubstore.ID) objCopyContact.Unread = false objCopyContact.Fields.Add "0x8542", vbString, ReplID,"0820060000000000C000000000000046" objCopyContact.Update Set objCopyContact = Nothing wscript.echo objcontact.subject end Sub Sub DeleteContact(replUID) strQuery = "<?xml version=""1.0""?><D:searchrequest xmlns:D = ""DAV:"">" strQuery = strQuery & "<D:sql>SELECT ""DAV:Displayname""" strQuery = strQuery & " FROM scope('shallow traversal of """ strQuery = strQuery & DestinURL & """') Where ""http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/0x8542"" = '" & replUID & "' AND ""DAV:isfolder"" = False " strQuery = strQuery & "</D:sql></D:searchrequest>" req.open "SEARCH", DestinURL, false req.setrequestheader "Content-Type", "text/xml" req.setRequestHeader "Translate","f" req.send strQuery wscript.echo req.responsetext If req.status >= 500 Then wscript.echo "Status: " & req.status wscript.echo "Status text: An error occurred on the server." ElseIf req.status = 207 Then wscript.echo "Status: " & req.status wscript.echo "Status text: " & req.statustext set oResponseDoc = req.responseXML set oNodeList = oResponseDoc.getElementsByTagName("a:href") For i = 0 To (oNodeList.length -1) set oNode = oNodeList.nextNode wscript.echo oNode.text req.open "DELETE", oNode.text, false req.send wscript.echo "Status: " & req.status Next Else wscript.echo "Status: " & req.status wscript.echo "Status text: " & req.statustext wscript.echo "Response text: " & req.responsetext End If end Sub Function Octenttohex(OctenArry) ReDim aOut(UBound(OctenArry)) For i = 1 to UBound(OctenArry) + 1 if len(hex(ascb(midb(OctenArry,i,1)))) = 1 then aOut(i-1) = "0" & hex(ascb(midb(OctenArry,i,1))) else aOut(i-1) = hex(ascb(midb(OctenArry,i,1))) end if Next Octenttohex = join(aOUt,"") End Function 

我不记得我在哪里find最初的脚本,但是如果我find它,我会发布。 我认为这个只能在Exchange 2003上运行。另外,为了正常工作,用户必须有folder to copy在正确的位置(但是是空的) folder to copy

作为一种可能的方法,您可以让某人编写脚本,将公用文件夹(CSV文件等)中的所有联系人复制到每个用户邮箱的“联系人”文件夹中。 (通过WebDAV访问邮箱的脚本将很容易做到这一点。)我不知道这样做的现成产品。

如果您不想进入该级别的工作,请考虑将联系人放入公用文件夹,并要求用户将其标记为“collections夹”或要求他们将联系人复制到其邮箱中。 显然,这不是“推”。

那么只需将联系人发送给用户呢? 我猜他们可能需要使用Outlook来添加它们,但是将它们发送给用户似乎很容易。

我不知道这是否会适用于您的问题,但您可以设置一个eGroupware系统。

这是免费的,开源的。 您可以将其与许多不同的手机同步,当然也可以与任何outlook或交换。 然后,您必须将系统与安装同步,才能在线获得联系。 然后每个用户需要configuration一个客户端进行同步。 如前所述,手机有很多不同的插件。

所有联系人然后被推送到您的客户电话。 您可以将它们分组并设置全局权限。 也许这会有所帮助。 但是请注意,eGroupware运行和设置仍然很困难。

不要把它们推出来,分享它们…

我发现这篇文章有一个像样的解释如何通过公用文件夹共享联系人。 另外这篇文章还提供了一些更多的信息,以及更多关于公用文件夹可以做什么的文章 。

一旦设置好,效果很好。