【问题标题】:How will affect Lotus Notes GetDatabase parameters my notes account?Lotus Notes GetDatabase 参数将如何影响我的notes 帐户?
【发布时间】:2021-07-09 08:06:52
【问题描述】:

我想发送带有 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

设置 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 for outlook发邮件,没有数据库参数。

【问题讨论】:

    标签: vba database email lotus


    【解决方案1】:

    首先: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())这一行。

    【讨论】:

    • 谢谢@Torsten。我认为将发送到 ROM 的电子邮件存储在 RAM 中(脚本执行时)会很好。为此,正如您所说,我需要在笔记客户端中创建一个数据库。我可以在文件/应用程序/新建中做到这一点。新的应用程序名称和位置:服务器:本地,标题:“Dummy” 文件名:“Dummy.nsf”。模板:服务器:本地,模板:-Blank-。文件名: ””。对吗?
    • 您想创建一个数据库来存储邮件,对吧?然后使用模板邮件 (x),其中 x 是客户端的版本号。
    • 谢谢@Torsten。我想我先试试这个方法,我不使用本地数据库,我自己设置了cc,所以如果电子邮件发送成功与否,我会得到信息。对于这种方法,我将使用 GETDATABASE("", "") 和 "Call Maildb.OpenMail" 和 "SaveMessageOnSend = False" 。使用这种方法,我将能够将发送的邮件存储在我的收件箱文件夹中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多