AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 41137
Accepted
Dayton Brown
Dayton Brown
Asked: 2009-07-16 09:11:32 +0800 CST2009-07-16 09:11:32 +0800 CST 2009-07-16 09:11:32 +0800 CST

推送联系人交换用户

  • 772

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

任何帮助表示赞赏。

编辑:

如果有人有很好的方法来管理与移动员工的联系,我也很想听听。

exchange-2003 outlook outlook-2007 outlook-2003
  • 5 5 个回答
  • 2288 Views

5 个回答

  • Voted
  1. Evan Anderson
    2009-07-16T09:22:06+08:002009-07-16T09:22:06+08:00

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

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

    • 0
  2. Russ Warren
    2009-07-17T05:13:11+08:002009-07-17T05:13:11+08:00

    将联系人通过电子邮件发送给用户怎么样?我猜他们可能需要使用 Outlook 添加它们,但将它们通过电子邮件发送给用户似乎很容易。

    • 0
  3. cb0
    2009-07-17T09:26:50+08:002009-07-17T09:26:50+08:00

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

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

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

    • 0
  4. Best Answer
    moshen
    2009-07-17T09:39:01+08:002009-07-17T09:39:01+08:00

    这是我一直用来将联系人的子文件夹从一个用户推送到文本文件中提供的用户列表中的一个极其损坏的 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 
    

    我不记得我在哪里找到了初始脚本,但如果我找到了,我会发布。我认为这个只能在 Exchange 2003 上运行。此外,为了使其正常工作,用户必须folder to copy已经在正确的位置(但为空)。

    • 0
  5. Nathan Hartley
    2009-07-17T13:19:45+08:002009-07-17T13:19:45+08:00

    不要推出它们,分享它们...

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

    设置好后效果很好。

    • 0

相关问题

  • 如何将 SMTP 直接从 IIS 6.0 服务器中继到 Exchange 2003 服务器

  • Exchange 备份的 NT 备份是否会使 Exchange 脱机?

  • 交换服务器 2003 在 hyper-v 上

  • 从另一个用户中删除不在办公室的助理(outlook 2007/exchange 2003)

  • 限制用户向电子邮件地址发送电子邮件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve