Notes.NotesSession vs Domino.NotesSession 密码提示
Notes.NotesSession vs Domino.NotesSession Password Prompt
抱歉我对references/COM/dlls的理解不佳。
我有一个 VB.Net 应用程序没有 Option Strict。它使用下面的代码发送 Lotus 电子邮件。
Dim s As Object = CreateObject("Notes.Notessession")
Dim db As Object = s.GetDatabase("", "")
Call db.openmail()
doc = db.CreateDocument
doc.ReplaceItemValue("SendTo", "someEmail@someEmailSpot.com")
doc.ReplaceItemValue("Subject", "Some subject text")
doc.ReplaceItemValue("Body", "Some body text")
Call doc.Send(False)
当我重新创建代码时 with Option Strict the
Dim db As Object = s.GetDataBase("", "")
行在s.GetDataBase下有一个后期绑定错误,不知如何解决。我找不到要添加到我的项目的引用,以便我可以将其转换为 Notes.Notessession.
我反而能够使用以下参考——“Lotus Domino Objects”Interop.Domino.dll——来编写下面的代码。
Dim session As New Domino.NotesSession
session.Initialize()
Dim dir As Domino.NotesDbDirectory = session.GetDbDirectory("")
dir.OpenMailDatabase()
Dim db As Domino.NotesDatabase = dir.OpenMailDatabase
Dim doc As Domino.NotesDocument = db.CreateDocument
doc.ReplaceItemValue("SendTo", "someEmail@someEmailSpot.com")
doc.ReplaceItemValue("Subject", "Some subject text")
doc.ReplaceItemValue("Body", "Some body text")
doc.Send(False)
问题是 Domino.NotesSession 似乎要求我提供密码,而 Notes.NotesSession 没有,无论是作为初始化中的参数还是在未传递密码时创建的提示中,例如上面的代码。
我的问题是:
有没有办法让 Domino.NotesSession 对象无需密码即可初始化,就像 Notes.NotesSession 对象一样?
在运行时引用什么来创建 Notes.NotesSession 对象,我如何在设计时添加这个引用?
是否有一个视图可以在运行时查看某个对象延迟绑定到什么类型的对象?
大概在第一个代码块中,s 被绑定到 Notes.Notessession,但在手表中查看它或使用 TypeOf 只是 return 一个通用的“_ComObject”。
不确定这是否会直接回答您的问题,希望对您有所帮助:
对于 Notes 6.5(至少),任何客户端都可以通过代码发送邮件(不需要开发人员许可。)如果您没有安装客户端,则下面的代码将不起作用。并且 - 如果您没有当前登录的会话,我认为您无法避免提供密码。
以下是我测试代码中最干净的发送工具。一个技巧是某些属性(如地址)更喜欢数组而不是简单的字符串。
Option Explicit On
Imports Domino ' ref to Interop.Domino.dll
Public Class frmLotousNotes
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim notesSession As Object, notesDatabase As Object, notesDocument As Object
Dim aTo(0) As String
Try
'Instantiate Lotus Notes COM's objects.
notesSession = CreateObject("Notes.NotesSession")
notesDatabase = notesSession.GETDATABASE("", "")
'Make sure Lotus Notes is open and available.
If notesDatabase.IsOpen = False Then notesDatabase.OPENMAIL()
'Create the document for the e-mail.
notesDocument = notesDatabase.CreateDocument
'Add data to the mainproperties of the e-mail's document.
aTo(0) = txtTo.Text ' note array needed for some properties
With notesDocument
.Form = "Memo"
.SendTo = aTo
.Subject = txtSubject.Text & ": " & Now()
.Body = txtMsg.Text
.SaveMessageOnSend = True
End With
'Send the e-mail.
With notesDocument
.PostedDate = Now()
.send(0, aTo)
End With
MsgBox("sent")
Catch ex As Exception
MsgBox(ex.Message)
Finally
'Release objects from memory.
notesDocument = Nothing
notesDatabase = Nothing
notesSession = Nothing
End Try
End Sub
End Class
Notes.NotesSession 是 Notes 客户端的 OLE 对象的根。 Domino.NotesSession 是 Notes/Domino 数据的 COM 对象的根。
仅当 Notes 客户端已经 运行 时,OLE 对象才能避免密码提示。如果不是 运行,调用 OLE 对象将启动客户端并提示输入密码。大多数人避免使用 OLE 对象,除非他们真的打算使用它们来驱动 Notes UI,这是通过 Notes.NotesUIWorkspace 和其他各种 NotesUI 类 完成的。
由于 Domino.NotesSession 是 COM,它独立于客户端运行,但它仍然使用随客户端安装的 Notes API。 Notes 的安全设置(文件 - 安全 - 用户安全 - 安全基础)中有一个标记为 "Don't prompt for a password from other Notes-based programs" 的复选框。如果您选中该框,那么当您调用 COM 类 时,如果 Notes 客户端已经 运行,您将不会收到密码提示。从本质上讲,这使您与使用 OLE 类 处于同等地位。但请注意:就在该复选框项目描述的旁边,在括号中,它说“(降低安全性)”。许多人确实选择启用此设置,但您需要注意它确实可能会打开一个漏洞,不可信的代码可能会通过该漏洞使用用户的凭据访问 Notes 数据库信息。
关于为什么您 do/don 看不到 IDE 中的引用,我们只能说它总是不一致,就这样吧。我不能给你任何押韵或理由。也就是说,最好不要看到 Notes.NotesSession 参考,因为如果人们同时看到两者,它只会让他们感到困惑。大多数人应该使用 COM 类.
抱歉我对references/COM/dlls的理解不佳。
我有一个 VB.Net 应用程序没有 Option Strict。它使用下面的代码发送 Lotus 电子邮件。
Dim s As Object = CreateObject("Notes.Notessession")
Dim db As Object = s.GetDatabase("", "")
Call db.openmail()
doc = db.CreateDocument
doc.ReplaceItemValue("SendTo", "someEmail@someEmailSpot.com")
doc.ReplaceItemValue("Subject", "Some subject text")
doc.ReplaceItemValue("Body", "Some body text")
Call doc.Send(False)
当我重新创建代码时 with Option Strict the
Dim db As Object = s.GetDataBase("", "")
行在s.GetDataBase下有一个后期绑定错误,不知如何解决。我找不到要添加到我的项目的引用,以便我可以将其转换为 Notes.Notessession.
我反而能够使用以下参考——“Lotus Domino Objects”Interop.Domino.dll——来编写下面的代码。
Dim session As New Domino.NotesSession
session.Initialize()
Dim dir As Domino.NotesDbDirectory = session.GetDbDirectory("")
dir.OpenMailDatabase()
Dim db As Domino.NotesDatabase = dir.OpenMailDatabase
Dim doc As Domino.NotesDocument = db.CreateDocument
doc.ReplaceItemValue("SendTo", "someEmail@someEmailSpot.com")
doc.ReplaceItemValue("Subject", "Some subject text")
doc.ReplaceItemValue("Body", "Some body text")
doc.Send(False)
问题是 Domino.NotesSession 似乎要求我提供密码,而 Notes.NotesSession 没有,无论是作为初始化中的参数还是在未传递密码时创建的提示中,例如上面的代码。
我的问题是:
有没有办法让 Domino.NotesSession 对象无需密码即可初始化,就像 Notes.NotesSession 对象一样?
在运行时引用什么来创建 Notes.NotesSession 对象,我如何在设计时添加这个引用?
是否有一个视图可以在运行时查看某个对象延迟绑定到什么类型的对象? 大概在第一个代码块中,s 被绑定到 Notes.Notessession,但在手表中查看它或使用 TypeOf 只是 return 一个通用的“_ComObject”。
不确定这是否会直接回答您的问题,希望对您有所帮助:
对于 Notes 6.5(至少),任何客户端都可以通过代码发送邮件(不需要开发人员许可。)如果您没有安装客户端,则下面的代码将不起作用。并且 - 如果您没有当前登录的会话,我认为您无法避免提供密码。
以下是我测试代码中最干净的发送工具。一个技巧是某些属性(如地址)更喜欢数组而不是简单的字符串。
Option Explicit On
Imports Domino ' ref to Interop.Domino.dll
Public Class frmLotousNotes
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim notesSession As Object, notesDatabase As Object, notesDocument As Object
Dim aTo(0) As String
Try
'Instantiate Lotus Notes COM's objects.
notesSession = CreateObject("Notes.NotesSession")
notesDatabase = notesSession.GETDATABASE("", "")
'Make sure Lotus Notes is open and available.
If notesDatabase.IsOpen = False Then notesDatabase.OPENMAIL()
'Create the document for the e-mail.
notesDocument = notesDatabase.CreateDocument
'Add data to the mainproperties of the e-mail's document.
aTo(0) = txtTo.Text ' note array needed for some properties
With notesDocument
.Form = "Memo"
.SendTo = aTo
.Subject = txtSubject.Text & ": " & Now()
.Body = txtMsg.Text
.SaveMessageOnSend = True
End With
'Send the e-mail.
With notesDocument
.PostedDate = Now()
.send(0, aTo)
End With
MsgBox("sent")
Catch ex As Exception
MsgBox(ex.Message)
Finally
'Release objects from memory.
notesDocument = Nothing
notesDatabase = Nothing
notesSession = Nothing
End Try
End Sub
End Class
Notes.NotesSession 是 Notes 客户端的 OLE 对象的根。 Domino.NotesSession 是 Notes/Domino 数据的 COM 对象的根。
仅当 Notes 客户端已经 运行 时,OLE 对象才能避免密码提示。如果不是 运行,调用 OLE 对象将启动客户端并提示输入密码。大多数人避免使用 OLE 对象,除非他们真的打算使用它们来驱动 Notes UI,这是通过 Notes.NotesUIWorkspace 和其他各种 NotesUI 类 完成的。
由于 Domino.NotesSession 是 COM,它独立于客户端运行,但它仍然使用随客户端安装的 Notes API。 Notes 的安全设置(文件 - 安全 - 用户安全 - 安全基础)中有一个标记为 "Don't prompt for a password from other Notes-based programs" 的复选框。如果您选中该框,那么当您调用 COM 类 时,如果 Notes 客户端已经 运行,您将不会收到密码提示。从本质上讲,这使您与使用 OLE 类 处于同等地位。但请注意:就在该复选框项目描述的旁边,在括号中,它说“(降低安全性)”。许多人确实选择启用此设置,但您需要注意它确实可能会打开一个漏洞,不可信的代码可能会通过该漏洞使用用户的凭据访问 Notes 数据库信息。
关于为什么您 do/don 看不到 IDE 中的引用,我们只能说它总是不一致,就这样吧。我不能给你任何押韵或理由。也就是说,最好不要看到 Notes.NotesSession 参考,因为如果人们同时看到两者,它只会让他们感到困惑。大多数人应该使用 COM 类.