VB 无需打开 Lotus Notes 即可发送邮件的宏
VB macro to send mail without opening Lotus notes
我想在不打开 Lotus Notes 的情况下使用 vbscript 发送邮件 UI。我设法编写了一个脚本,允许发送带有附件的电子邮件并且一切正常。然而,当我 运行 宏并且我希望它静默工作(不启动应用程序)时应用程序启动。
这是我的代码:
Dim noSession As Object
Dim noDatabase As Object
Dim noDocument As Object
Dim paths() As String
'Instantiate the Lotus Notes COM's Objects.
Set MailSession = CreateObject("Notes.NotesSession")
Set MailDatabase = MailSession.GetDatabase("", "")
'If Lotus Notes is not open then open the mail-part of it.
If MailDatabase.IsOpen = False Then MailDatabase.OPENMAIL
'Create the list of recipients.
vaRecipients = VBA.Array(EmailTo)
vaCCRecipients = VBA.Array(EmailCC)
vaBCCRecipients = VBA.Array(EmailBCC)
Set MailDoc = MailDatabase.CreateDocument
MailDoc.Form = "Memo"
MailDoc.sendTo = vaRecipients
MailDoc.CopyTo = vaCCRecipients
MailDoc.BlindCopyTo = vaBCCRecipients
MailDoc.Subject = Subject
MailDoc.Body = Body
MailDoc.SAVEMESSAGEONSEND = True
MailDoc.ReplyTo = Sender
MailDoc.SMTPOriginator = Sender
MailDoc.Sender = Sender
MailDoc.principal = Sender
MailDoc.inetprincipal = Sender
MailDoc.from = Sender
MailDoc.inetfrom = Sender
MailDoc.displayfrom = Sender
paths = Split(AttachmentPaths, ";")
Dim richTextItem As Object
Dim AttachmentPath As String
For i = LBound(paths()) To UBound(paths())
AttachmentPath = paths(i)
Set richTextItem = MailDoc.CreateRichTextItem("Attachment" & i)
Call richTextItem.EmbedObject(1454, "", AttachmentPath)
Next i
MailDoc.Send 0, vaRecipients
'Release objects from memory.
Set noDocument = Nothing
Set noDatabase = Nothing
Set noSession = Nothing
MsgBox "The e-mail has successfully been created and distributed", vbInformation
问题是 Lotus notes UI 每次我 运行 启动宏都是因为这一行:
If MailDatabase.IsOpen = False Then MailDatabase.OPENMAIL
您认为 OPENMAIL 是导致客户端打开的原因的假设是错误的。
真正的问题是您对基于 OLE 的对象的使用class“Notes.NotesSession”。
如果你真的想在不打开笔记客户端的情况下离开,你需要使用基于 COM 的对象class“Lotus.NotesSession”或“Domino.NotesSession”。
问题是:当使用 Lotus.NotesSession 时,您需要自己用密码初始化会话(您的密码必须在代码中),否则黑色 DOS- 提示符会要求您提供 Notes- 密码。使用“Notes.NotesSession”时,客户端本身用于身份验证。这就是为什么它会在 运行 您的代码时打开。如果它已经打开,则不会发生任何事情。
你可以查看了解更多细节,它的原理仍然是正确的。
代码与其他代码几乎相同class,您还需要正确安装 Notes 客户端。您只需要初始化会话而不是仅仅使用它:
Set MailSession = CreateObject("Lotus.NotesSession")
MailSession.Initialize( "yourpassword" )
如果您不输入密码,系统会提示您输入密码。
我想在不打开 Lotus Notes 的情况下使用 vbscript 发送邮件 UI。我设法编写了一个脚本,允许发送带有附件的电子邮件并且一切正常。然而,当我 运行 宏并且我希望它静默工作(不启动应用程序)时应用程序启动。
这是我的代码:
Dim noSession As Object
Dim noDatabase As Object
Dim noDocument As Object
Dim paths() As String
'Instantiate the Lotus Notes COM's Objects.
Set MailSession = CreateObject("Notes.NotesSession")
Set MailDatabase = MailSession.GetDatabase("", "")
'If Lotus Notes is not open then open the mail-part of it.
If MailDatabase.IsOpen = False Then MailDatabase.OPENMAIL
'Create the list of recipients.
vaRecipients = VBA.Array(EmailTo)
vaCCRecipients = VBA.Array(EmailCC)
vaBCCRecipients = VBA.Array(EmailBCC)
Set MailDoc = MailDatabase.CreateDocument
MailDoc.Form = "Memo"
MailDoc.sendTo = vaRecipients
MailDoc.CopyTo = vaCCRecipients
MailDoc.BlindCopyTo = vaBCCRecipients
MailDoc.Subject = Subject
MailDoc.Body = Body
MailDoc.SAVEMESSAGEONSEND = True
MailDoc.ReplyTo = Sender
MailDoc.SMTPOriginator = Sender
MailDoc.Sender = Sender
MailDoc.principal = Sender
MailDoc.inetprincipal = Sender
MailDoc.from = Sender
MailDoc.inetfrom = Sender
MailDoc.displayfrom = Sender
paths = Split(AttachmentPaths, ";")
Dim richTextItem As Object
Dim AttachmentPath As String
For i = LBound(paths()) To UBound(paths())
AttachmentPath = paths(i)
Set richTextItem = MailDoc.CreateRichTextItem("Attachment" & i)
Call richTextItem.EmbedObject(1454, "", AttachmentPath)
Next i
MailDoc.Send 0, vaRecipients
'Release objects from memory.
Set noDocument = Nothing
Set noDatabase = Nothing
Set noSession = Nothing
MsgBox "The e-mail has successfully been created and distributed", vbInformation
问题是 Lotus notes UI 每次我 运行 启动宏都是因为这一行:
If MailDatabase.IsOpen = False Then MailDatabase.OPENMAIL
您认为 OPENMAIL 是导致客户端打开的原因的假设是错误的。
真正的问题是您对基于 OLE 的对象的使用class“Notes.NotesSession”。 如果你真的想在不打开笔记客户端的情况下离开,你需要使用基于 COM 的对象class“Lotus.NotesSession”或“Domino.NotesSession”。
问题是:当使用 Lotus.NotesSession 时,您需要自己用密码初始化会话(您的密码必须在代码中),否则黑色 DOS- 提示符会要求您提供 Notes- 密码。使用“Notes.NotesSession”时,客户端本身用于身份验证。这就是为什么它会在 运行 您的代码时打开。如果它已经打开,则不会发生任何事情。
你可以查看
代码与其他代码几乎相同class,您还需要正确安装 Notes 客户端。您只需要初始化会话而不是仅仅使用它:
Set MailSession = CreateObject("Lotus.NotesSession")
MailSession.Initialize( "yourpassword" )
如果您不输入密码,系统会提示您输入密码。