Vba VB宏在不打开Lotus notes的情况下发送邮件
我想在不打开LotusNotesUI的情况下使用vbscript发送邮件。我设法写了一个脚本,允许发送带有附件的电子邮件,一切正常。但是,当我运行宏时,应用程序被启动,我希望它能够正常工作(不启动应用程序) 这是我的密码: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
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客户端启动)的情况下才相关,没有启动的客户端,你仍然需要输入密码……是的,这是真的。