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#。
答案 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中的邮件是可能的常见第三类)。