如何从Lotus Notes获取Internet地址

时间:2010-07-19 07:18:50

标签: c# ldap lotus-notes

Notes日历条目有一个名为“Chair”的项目,它是“CN = My Name / OU = Something / O = SomethingElse”行的专有名称。如何将其转换为SMTP地址,例如“my.name@company.com”?我试着查看具有Addr821属性的NotesName,但是只有当你给它一个SMTP地址时这似乎才有效 - 当给出一个可分辨名称时,Addr821会给你相同的东西。

我看到的一个选项是使用地址簿,但如何使用专有名称查找?

我假设我可以使用LDAP查找它,但是我的代码如何找到LDAP服务器(在本例中是Novell)?

任何帮助都将不胜感激。

我正在使用带有Interop.Domino.dll的c#。

5 个答案:

答案 0 :(得分:7)

我从未使用过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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

如果你想手动:打开Names.nsf或使用“目录服务”(详情逃避我),打开$ Users视图,并使用缩写用户名(从''派生'找到用户'人'文档主席'名称),找到并使用'InternetAddress'字段值。这假设此字段已填充“当前/真实”电子邮件地址。

虽然$ Vim视图(和其他视图)可能很有用,但您可能需要做更多工作来消除大型交易中的用户名歧义,以获得所需名称匹配的正确形式。

$ Users视图可以匹配Abbreviated,Common User name,first,last,shortname和soundex,通常是最有用的“查找”视图。它最有可能是“完全构建”,因为主要注释邮件路由器使用此视图来路由电子邮件。

要将名称转换为“尊重格式”,请使用 @name([缩写];名称)或LotusScript等效名称:

dim n as new notesName
Set n = session.CreateName(canonical/distinguished/name)
distname = n.abbreviated

答案 3 :(得分:1)

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

答案 4 :(得分:0)

如果他们有Novell Identity Manager,它将数据从多个源同步到其他多个目标,并且您有一个eDirectory实例用于LDAP连接,则只需回读Mail属性。

现在它取决于如何处理与Notes的同步。我通常会将Notes完全可分辨的名称存储在eDirectory的属性中,因为正如您所指出的那样,它很有用。

但是,如果此“主席”对象的类不是用户或组,则很可能他们没有同步它。 (DB中的邮件是可能的常见第三类)。