Lotus Notes GetDatabase 参数将如何影响我的 Notes 帐户?

问题描述

我想用excel宏发送电子邮件。我在一些网站上读过同样简单的 VBA 代码,它可以发送带有附件的电子邮件

Sub Send_Email_via_Lotus_Notes()
    Dim Maildb As Object
    Dim MailDoc As Object
    Dim Body As Object
    Dim Session As Object
    'Start a session of Lotus Notes
        Set Session = CreateObject("Lotus.NotesSession")
    'This line prompts for password of current ID noted in Notes.INI
        Call Session.Initialize
    'or use below to provide password of the current ID (to avoid Password prompt)
        'Call Session.Initialize("<password>")
    'Open the Mail Database of your Lotus Notes
        Set Maildb = Session.GETDATABASE("","D:\Notes\data\Mail\eXceLiTems.nsf")
        If Not Maildb.IsOpen = True Then Call Maildb.Open
    'Create the Mail Document
        Set MailDoc = Maildb.CREATEDOCUMENT
        Call MailDoc.REPLACEITEMVALUE("Form","Memo")
    'Set the Recipient of the mail
        Call MailDoc.REPLACEITEMVALUE("SendTo","Ashish Jain")
    'Set subject of the mail
        Call MailDoc.REPLACEITEMVALUE("Subject","Subject Text")
    'Create and set the Body content of the mail
        Set Body = MailDoc.CREATERICHTEXTITEM("Body")
        Call Body.APPENDTEXT("Body text here")
    'Example to create an attachment (optional)
        Call Body.ADDNEWLINE(2)
        Call Body.EMBEdobJECT(1454,"","C:\dummy.txt","Attachment")
    'Example to save the message (optional) in Sent items
        MailDoc.SAVEMESSAGEONSEND = True
    'Send the document
    'Gets the mail to appear in the Sent items folder
        Call MailDoc.REPLACEITEMVALUE("PostedDate",Now())
        Call MailDoc.SEND(False)
    'Clean Up the Object variables - Recover memory
        Set Maildb = nothing
        Set MailDoc = nothing
        Set Body = nothing
        Set Session = nothing
End Sub

Set Maildb = Session.GETDATABASE("","D:\Notes\data\Mail\eXceLiTems.nsf") 在我的工作笔记本电脑上有 10 个 nsf 文件。我不知道我应该把哪个放在第二个参数中。 我已阅读此处的语法:https://help.hcltechsw.com/dom_designer/9.0.1/appdev/H_GETDATABASE_METHOD.html

两者都可以是空字符串。如果我使用空字符串,它会创建一个数据库,如果我是正确的。因为我想每天发送 5 封电子邮件,所以我想在 for 循环中发送电子邮件。如果我使用空字符串,代码会每天创建5个数据库吗?我想是的,所以我想我需要将 10 个 nsf 文件之一用作第二个参数,所以它不会创建,但我不想用这个使我的笔记帐户崩溃。 我对笔记很陌生。我用vba foroutlook发邮件,没有数据库参数。

解决方法

首先:GetDatabase 永远不会创建新的数据库。如果您输入的数据库存在,那么您的 OBJECT(不是真实的东西,只是一个变量)将被创建并且 isOpen- 属性将为真,否则为假。

您需要决定(至少暂时)将要发送的邮件存储在何处。

如果你设置 SaveMessageOnSend = True 那么它将被保存在那个数据库中,如果你将它设置为 False,那么它只会在内存中创建而不保存,但你仍然需要一个容器来“内存”-文档。

通常以编程方式创建的邮件将保存在用户的邮件文件中(在这种情况下:在您的邮件文件中。

正确的代码是:

'Initialize object without really opening a database
Set Maildb = Session.GETDATABASE("","")
'Now open the users' mailfile
Call Maildb.OpenMail

如果您有一些“虚拟”数据库来创建邮件,那么您需要在使用 Notes 客户端运行脚本(在 Notes\Data - 目录中)之前创建该数据库并打开该数据库:

如果你例如在 Notes\Data 的 mail- 子目录中创建它,那么它可能具有如下绝对路径:

C:\Program Files (x86)\HCL\Notes\Data\mail\dummy.nsf

在您的脚本中,您可以使用相对路径(从数据开始)对其进行寻址:

Set Maildb = Session.GETDATABASE("","mail\dummy.nsf")

或绝对路径(无关紧要),例如:

Set Maildb = Session.GETDATABASE("","C:\Program Files (x86)\HCL\Notes\Data\mail\dummy.nsf")

在这种情况下不需要“OpenMail”-命令,因为您不想使用用户的邮件文件而是明确给出的...

还有一件事:Call MailDoc.SEND(False) 已经在您的邮件中创建了一个 PostedDate- 项目。无需使用 Call MailDoc.REPLACEITEMVALUE("PostedDate",Now()) 行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...