Vba VB宏在不打开Lotus notes的情况下发送邮件

Vba VB宏在不打开Lotus notes的情况下发送邮件,vba,lotus-notes,lotus-domino,Vba,Lotus Notes,Lotus Domino,我想在不打开LotusNotesUI的情况下使用vbscript发送邮件。我设法写了一个脚本,允许发送带有附件的电子邮件,一切正常。但是,当我运行宏时,应用程序被启动,我希望它能够正常工作(不启动应用程序) 这是我的密码: Dim noSession As Object Dim noDatabase As Object Dim noDocument As Object Dim paths() As String 'Instantiate the Lotus Notes COM's Ob

我想在不打开LotusNotesUI的情况下使用vbscript发送邮件。我设法写了一个脚本,允许发送带有附件的电子邮件,一切正常。但是,当我运行宏时,应用程序被启动,我希望它能够正常工作(不启动应用程序)

这是我的密码:

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,因为这行代码:


如果MailDatabase.IsOpen=False,则MailDatabase.OPENMAIL

您错误地认为OPENMAIL是客户端打开的原因

真正的问题是使用基于OLE的对象类“Notes.NotesSession”。 如果您真的不想打开notes客户机,那么需要使用基于COM的对象类“Lotus.NotesSession”或“Domino.NotesSession”

问题是:在使用Lotus.NotesSession时,您需要自己使用密码初始化会话(密码必须在代码中),否则一个黑色的DOS提示会要求您输入Notes密码。使用“Notes.NotesSession”时,客户端本身用于身份验证。这就是为什么它会在运行代码时打开。如果它已经打开了,什么也不会发生

你可以查看更多细节,它的原则仍然正确

代码与其他类几乎相同,您还需要正确安装Notes客户端。您只需初始化会话,而不只是使用它:

Set MailSession = CreateObject("Lotus.NotesSession")
MailSession.Initialize( "yourpassword" )

如果您没有输入密码,系统将提示您输入密码。

谢谢您的帮助。您有Domino.NotesSession的代码示例吗?我可以在哪里硬编码我的用户名和密码?添加了两行代码…在用户安全性中有一个设置-一个复选框标记为“不提示从其他基于Notes的程序输入密码”。它在括号中还说,“降低安全性”,它确实如此,但是,如果你愿意冒用户可能下载以静默方式读写电子邮件(以及可能的其他内容)的恶意软件的风险,那么密码提示是可以避免的。我不推荐它,但它就在那里,值得一提。你是对的@Richard,但是这个复选标记imho只有在id已经解锁(Notes客户端启动)的情况下才相关,没有启动的客户端,你仍然需要输入密码……是的,这是真的。