[Date Prev][Date Next] [Chronological] [Thread] [Top]

Exporting LDIF from Outlook



Hi,

This is a simple add-in for outlook 2000 (not tried it on 98 or earlier)
that exports your address-book as an ldif file for use with openldap. You
would need some simple understanding of outlook/VBA to use it.

I'm not sure where (or if) you would include it with openldap, but if you
want to, some may find it useful when moving from windows to unix.

Comments?

Joe


#!/bin/sh

--
' Copyright 2000, Joe Walker <joe@eireneh.com>, All rights reserved.
' This is free software; you can redistribute and use it
' under the same terms as OpenLDAP itself.

Option Explicit

Private addout As Integer

' Change this to be wherever you want to write to:
Private Const ADDFILE As String = "S:\joe\ldapadd.ldif"
Private Const ROOT As String = "dc=domain, dc=com"

' You can then read this in using something like this:
'#!/bin/sh
'
'FILE=/home/joe/ldapadd.ldif
'ROOT="dc=domain, dc=com"
'
'echo "Password required for $ROOT."
'echo "Warning: password will be echoed to terminal."
'echo ""
'echo -n "password: "
'read PASS
'
'echo "Deleting old entries ..."
'ldapsearch -b "$ROOT" "(objectclass=*)" dn |
'    grep -v "^$ROOT$" |
'    grep -v "^cn=Manager, $ROOT$" |
'    grep -v "^$" |
'    ldapdelete -D "cn=Manager, $ROOT" -w $PASS -c
'
'echo "Adding entries from $FILE ..."
'cat $FILE |
'    dos2unix |
'    ldapadd -D "cn=Manager, $ROOT" -w $PASS -c |
'    grep -v "^$"
'
'#ldapsearch -L -b "$ROOT" "(objectclass=*)"

'---------------------------------------------------------------------------
-----

Sub LDIFExport()

  Dim contacts As mapifolder
  Dim contact As ContactItem

  Set contacts = GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)

  InitOutput

  For Each contact In contacts.Items
    FieldOutput "dn", "cn=" + contact.FirstName + " " + contact.LastName + _
                ", " + ROOT
    FieldOutput "te", contact.LastFirstSpaceOnly
    FieldOutput "cn", contact.FirstName
    FieldOutput "sn", contact.LastName

    FieldOutput "mail", contact.Email1Address
    FieldOutput "homePhone", contact.HomeTelephoneNumber
    FieldOutput "pager", contact.PagerNumber
    FieldOutput "mobile", contact.MobileTelephoneNumber
    FieldOutput "web", contact.WebPage
    FieldOutput "telephoneNumber", contact.BusinessTelephoneNumber
    FieldOutput "officeFAX", contact.BusinessFaxNumber
    FieldOutput "title", contact.Title
    FieldOutput "department", contact.Department
    FieldOutput "physicalOfficeDeliveryName", contact.OfficeLocation
    FieldOutput "organizationName", contact.CompanyName
    FieldOutput "URL", contact.BusinessHomePage
    FieldOutput "givenName", contact.FirstName
    FieldOutput "initials", contact.MiddleName
    FieldOutput "sn", contact.LastName
    FieldOutput "nickname", contact.NickName
    FieldOutput "homePostalAddress", contact.HomeAddress
    FieldOutput "city", contact.HomeAddressCity
    FieldOutput "otherFacsimilieTelephoneNumber", contact.OtherFaxNumber
    FieldOutput "postalAddress", contact.BusinessAddress
    FieldOutput "l", contact.BusinessAddressCity
    FieldOutput "st", contact.BusinessAddressState
    FieldOutput "postalCode", contact.BusinessAddressPostalCode
    FieldOutput "countryName", contact.BusinessAddressCountry
    FieldOutput "department", contact.Department
    FieldOutput "info", contact.Body
    FieldOutput "objectclass", "person"
    FieldOutput "objectclass", "organizationalPerson"
    ObjectEnd
  Next

  DeInitOutput

End Sub


'---------------------------------------------------------------------------
-----

Sub FieldOutput(ldifprop As String, olprop As String)

  Dim newolprop As String
  Dim i As Integer
  Dim temp As String

  newolprop = Trim(olprop)
  newolprop = Swap(newolprop, vbCrLf, "$")
  newolprop = Swap(newolprop, vbCr, "$")
  newolprop = Swap(newolprop, vbLf, "$")
  newolprop = Swap(newolprop, " ,", ",")
  newolprop = Swap(newolprop, " & ", " and ")
  newolprop = Trim(newolprop)

  If newolprop = "" Then
    Exit Sub
  End If

  AddOutput Trim(ldifprop) + ": " + newolprop

End Sub


'---------------------------------------------------------------------------
-----

Function Swap(orig As String, from As String, repl As String) As String

  Dim pos As Integer

  Swap = orig

  Do

    pos = InStr(Swap, from)

    If pos = 0 Then
      Exit Do
    End If

    Swap = Mid$(Swap, 1, pos - 1) & repl & Mid$(Swap, pos + Len(from))

  Loop

End Function


'---------------------------------------------------------------------------
-----

Sub ObjectEnd()

  AddOutput ""

End Sub


'---------------------------------------------------------------------------
-----

Sub AddOutput(line As String)

  Print #addout, line

End Sub


'---------------------------------------------------------------------------
-----

Sub InitOutput()

  addout = FreeFile
  Open ADDFILE For Output As #addout

End Sub


'---------------------------------------------------------------------------
-----

Sub DeInitOutput()

  Close #addout

End Sub


'---------------------------------------------------------------------------
-----



Legal Disclaimer:-

Please be aware that messages sent over
the Internet may not be secure and should
not be seen as forming a legally binding
contract unless otherwise stated.