【问题标题】:VB macro to send mail without opening Lotus notes无需打开 Lotus 便笺即可发送邮件的 VBA 宏
【发布时间】:2021-03-03 09:42:52
【问题描述】:

我想在不打开 Lotus Notes UI 的情况下使用 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,因为这行:

If MailDatabase.IsOpen = False Then MailDatabase.OPENMAIL

【问题讨论】:

    标签: vba lotus-notes lotus-domino


    【解决方案1】:

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

    真正的问题是您对基于 OLE 的对象类“Notes.NotesSession”的使用。 如果你真的想在不打开notes-Client的情况下离开,你需要使用基于COM的对象类“Lotus.NotesSession”或“Domino.NotesSession”。

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

    你可以查看this old post了解更多详情,它的原理仍然是正确的。

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

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

    如果您不输入密码,系统会提示您输入密码。

    【讨论】:

    • 感谢您的帮助。你有 Domino.NotesSession 的代码示例吗?我可以在哪里硬编码我的用户名和密码?
    • “用户安全”中有一个设置 - 一个标记为“不提示其他基于 Notes 的程序输入密码”的复选框。它还在括号中说“降低了安全性”,确实如此,但如果您愿意冒用户可能会下载恶意软件以静默读写电子邮件(以及可能的其他内容)的风险,那么密码提示可以是避免。我不推荐它,但它就在那里,值得一提。
    • 你是对的@Richard,但这个复选标记 imho 仅在 id 已解锁(Notes 客户端已启动)时才相关,如果没有启动客户端,您仍然需要输入密码...
    • 是的,没错。
    猜你喜欢
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2022-07-24
    • 2018-05-03
    • 1970-01-01
    • 2022-08-17
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多