Как получить Интернет-адрес от Lotus Notes - PullRequest
2 голосов
/ 19 июля 2010

Запись календаря Notes имеет элемент под названием «Стул», который является отличительным именем в виде строк «CN = My Name / OU = Something / O = SomethingElse». Как мне преобразовать это в SMTP-адрес, такой как «my.name@company.com»? Я попытался просмотреть NotesName, у которого есть свойство Addr821, но, похоже, это работает, только если вы даете ему SMTP-адрес - когда ему присваивается отличительное имя, Addr821 возвращает вам то же самое.

Один вариант, который я вижу, - это использовать адресную книгу, но как мне найти ее, используя отличительное имя?

Я предполагаю, что смогу найти его с помощью LDAP, но как мой код обнаруживает сервер LDAP (в данном случае это Novell)?

Любая помощь будет оценена.

Я использую c # с Interop.Domino.dll.

Ответы [ 5 ]

7 голосов
/ 19 июля 2010

Я никогда не использовал interop.domino.dll, но я думаю, что эти подходы могут вам помочь:

Если вы можете использовать функцию evaluate, вы можете использовать формулу @NameLookup:

evaluate("@NameLookup([Exhaustive];Chair;'InternetAddress')",CalendarDocument)

Другой подход заключается в том, чтобы «вручную» искать имя в каталоге Domino:

  • Пройдите по session.addressbooks, найдите общедоступное и на сервере.
  • Получить представление $VIMPeople.
  • getDocumentByKey с использованием сокращенного формата имени.

Редактировать

Вот (не проверенный) код LotusScript для получения InternetAddress для данного пользователя, его относительно легко перевести на c #:

Function GetInternetAddress(username as string) as string
    On Error Goto errorthrower
    dim session as new NotesSession
    dim dominodirectory as NotesDatabase
    dim notesusername as new NotesName(username)


    forall candidate in session.AddressBooks
        if candidate.isPublicAddressBook and candidate.Server <> "" then
            set dominodirectory = candidate
            exit forall
        end if
    end forall

    if dominodirectory is nothing then error 1900,"Failed to find Domino Directory."
    if not dominodirectory.isOpen then call dominodirectory.open("","")

    dim view as NotesView
    set view = dominodirectory.getView("$VIMPeople")

    dim document as notesdocument
    set document = view.getDocumentByKey(notesusername.Abbreviated, true)
    if document is nothing then error 1900,"Failed to find document matching '" & username & "'"

    GetInternetAddress = document.InternetAddress(0)

    Exit Function
ErrorThrower:
    Error Err, Error & Chr(13) + "Module: " & Cstr( Getthreadinfo(1) ) & ", Line: " & Cstr( Erl )
End Function
3 голосов
/ 31 июля 2013
Sub Click(Source As Button)
    Dim session As NotesSession
    Dim directory As NotesDirectory

    Set session = New NotesSession
    Set directory = session.GetDirectory("")

    Dim mailinfo As Variant
    Dim ooo As String   
    Dim mailmsg As String   
    Dim mailname As String  
    'mailname = Inputbox$("Name of user")
    On Error Goto mailerror 
    ''''''''The Paremeters mean, GetMailInfo(The userName,GetServerInfo?,Flasg Error incase of Multiple Names Found?)
    'mailinfo = directory.GetMailInfo(mailname, False, True)
    mailinfo = directory.GetMailInfo("Eliud Ngugi", False, True)
    On Error Goto 0 

    Messagebox  "Internet Address "  & mailinfo(7) ,64
    Exit Sub
    mailerror:  
        Messagebox  Error(),, "Error number " & Err()
        Exit Sub
End Sub
1 голос
/ 31 июля 2013
Sub Click(Source As Button)

    Dim session As NotesSession
    Dim directory As NotesDirectory

    Set session = New NotesSession
    Set directory = session.GetDirectory("")

    Dim mailinfo As Variant
    Dim ooo As String   
    Dim mailmsg As String   
    Dim mailname As String  
    'mailname = Inputbox$("Name of user")
    On Error Goto mailerror 
    ''''''''The Paremeters mean, GetMailInfo(The userName,GetServerInfo?,Flasg Error incase of Multiple Names Found?)
    mailinfo = directory.GetMailInfo(mailname, False, True)
    mailinfo = directory.GetMailInfo("Eliud Ngugi", False, True)
    On Error Goto 0 

    Messagebox  "Internet Address "  & mailinfo(7) ,64
    Exit Sub
mailerror:  
    Messagebox  Error(),, "Error number " & Err()
    Exit Sub
End Sub
1 голос
/ 17 августа 2010

Если вы хотите перейти вручную: откройте файл Names.nsf или используйте «Справочная служба каталогов» (подробности меня ускользают), откройте представление «$ Users» и найдите документ «person» пользователя, используя сокращенное имя пользователя (полученное из «имя председателя», найдите и используйте значение поля «InternetAddress». Это предполагает, что это поле было заполнено «текущим / реальным» адресом электронной почты.

В то время как представления $ Vim (и другие) могут быть полезны, вам может потребоваться больше работы для устранения неоднозначности имен пользователей в больших организациях, чтобы получить правильную форму требуемого соответствия имени.

$ Представление пользователей может совпадать по сокращенному, общему имени пользователя, имени, фамилии, имени и soundex и, как правило, является наиболее полезным представлением «поиска». Скорее всего, он будет «полностью построен», так как основной почтовый маршрутизатор Notes использует это представление для маршрутизации электронной почты.

Чтобы преобразовать имя в «различимый формат», используйте @ name ([Сокращение]; имя) или эквивалент LotusScript: что-то вроде:

dim n as new notesName
Set n = session.CreateName(canonical/distinguished/name)
distname = n.abbreviated
0 голосов
/ 19 июля 2010

Если у них есть Novell Identity Manager, который будет синхронизировать данные из нескольких источников с другими несколькими адресатами, и у вас есть экземпляр eDirectory для использования для подключения LDAP, просто прочитайте атрибут Mail.

Теперь это зависит от того, как обрабатывается синхронизация с Notes. Я обычно храню полностью различающееся имя Notes в атрибуте в eDirectory, поскольку, как вы заметили, это полезно иметь.

Однако, если класс этого объекта "Председатель" не является ни пользователем, ни группой, скорее всего, они не синхронизируют его. (Почта в БД - это распространенный третий класс).

...