0

我正在尝试编写一个 Excel VBA 代码,它允许我自动创建和发送 Lotus Notes 电子邮件。我面临的问题是创建富文本电子邮件的困难,所以我认为打开草稿电子邮件会更容易,带有将被替换的标记文本(例如PASTE EXCEL CELLS HERE)然后只是:

.GotoField ("Body")
.FINDSTRING "PASTE EXCEL CELLS HERE"'

并更换。

关于如何打开某个草稿电子邮件的任何帮助?也许是.CreateDocument财产?

非常感谢!

4

5 回答 5

1

其他人提出了有趣的概念,但最可靠的方法是在映射到正文富文本项的 MIME 实体中使用 HTML。使用NotesSession..Convertmime = False您可以将正文构建为 HTML,然后发送消息。根据 Joseph Hoetzl here的帖子,LotusScript 等价物是这样的:

Sub Initialize()
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim stime as Single

    Dim alog As New NotesLog("debug")
    Call alog.OpenAgentLog()

    stime = Timer
    On Error GoTo eh

    Dim doc As NotesDocument
    Dim body As NotesMIMEEntity
    Dim header As NotesMIMEHeader
    Dim stream As NotesStream
    Dim child As NotesMIMEEntity
    Dim sendTo As String
    Dim subject As String

    s.Convertmime = False
    sendto = s.Effectiveusername
    subject = "Demo Message"

    Set db= s.Currentdatabase
    Set doc=db.Createdocument()
    Set stream = s.CreateStream
    Set body = doc.CreateMIMEEntity
    Set header = body.CreateHeader({MIME-Version})
    Call header.SetHeaderVal("1.0")
    Set header = body.CreateHeader("Content-Type")
    Call header.SetHeaderValAndParams({multipart/alternative;boundary="=NextPart_="})
    'Add the to field
    Set header = body.CreateHeader("To")
    Call header.SetHeaderVal(SendTo)

    'Add Subject Line
    Set header = body.CreateHeader("Subject")
    Call header.SetHeaderVal(subject)

    'Add the body of the message
    Set child = body.CreateChildEntity

    Call stream.WriteText("<h1>Demo HTML Message</h1>")
    Call stream.WriteText(|<table colspacing="0" colpadding="0" border="none">|)
    Call stream.WriteText(|<tr><td>cell 1.1</td><td>cell 1.2</td><td>cell 1.3</td></tr>|)
    Call stream.WriteText(|<tr><td>cell 2.1</td><td>cell 2.2</td><td>cell 2.3</td></tr>|)
    Call stream.WriteText(|<tr><td>cell 3.1</td><td>cell 3.2</td><td>cell 3.3</td></tr>|)
    Call stream.WriteText(|</table>|)
    Call stream.WriteText(|<div class="headerlogo">|)
    Call stream.WriteText(|<!-- ...some more HTML -->|)

    Call child.setContentFromText(stream, {text/html;charset="iso-8859-1"}, ENC_NONE)
    Call stream.Truncate 'Not sure if I need this
    Call stream.Close
    Call doc.CloseMIMEEntities(True)
    Call doc.replaceItemValue("Form", "Memo")
    Call doc.Send(False, sendTo)


es:
    Exit Sub
eh:
    Dim emsg$
    emsg = Error & " at " & Erl & " in " & s.Currentagent.name
    Call alog.logError(Err, emsg)
    MsgBox "ERROR: " & Err & ": " & emsg
    Resume es
End Sub

所有这些都应该相当容易地转换为 Excel 中的 VBA。当然,您可以对 HTML 进行任意复杂的处理。

于 2013-11-04T16:41:34.917 回答
0

您想要做的并不重要,但您提到了一封电子邮件草稿,因此可能有一种解决方法。

在您的邮件设置中,您可以指定一个签名文件,该文件可以是磁盘上的外部 html 文件。所以修改签名文件,然后创建你的新邮件,然后按照你想要的方式填充正文字段。

对于示例代码,在备忘录表单中应该有一个按钮来指定要使用的签名文件。您可以将其用作基线。

于 2013-11-04T05:03:31.760 回答
0

谢谢大家!

但我找到了我想要的,而不必每次都重新创建整个电子邮件:

Sub EditSelectedMail()
Dim NSession As Object
Dim NDatabase As Object
Dim NUIWorkspace As Object
Dim NUIdoc As Object

Set NSession = CreateObject("Notes.NotesSession")
Set NUIWorkspace = CreateObject("Notes.NotesUIWorkspace")
Set NDatabase = NSession.GetDatabase("", "")
If Not NDatabase.IsOpen Then NDatabase.OPENMAIL

Set NUIdoc = NUIWorkspace.EDITDOCUMENT(True)
With NUIdoc

    'Find the marker text in the Body item
    .GotoField ("Body")
    .FINDSTRING "**PASTE EXCEL CELLS HERE**"

    'Copy Excel cells to clipboard
    Sheets("Sheet1").Range("A1:E6").Copy

    'Create a temporary Word Document
    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = False                                 
    WordApp.Documents.Add

    'Paste into Word document and copy to clipboard
    With WordApp.Selection
        .PasteSpecial DataType:=10      
        'Enum WdPasteDataType: 10 = HTML; 2 = Text; 1 = RTF
        .WholeStory
        .Copy
    End With

    'Paste from clipboard (Word) to Lotus Notes document
    .Paste
    Application.CutCopyMode = False

    'WordApp.Quit SaveChanges:=False
    Set WordApp = Nothing

End With  
End Sub

我只需选择我的“模板”,将其复制到新消息中,然后运行宏。

于 2013-11-25T03:56:24.440 回答
0

“草稿”一词在这里可能不合适,但“模板”一词也是如此。两者在 Lotus Notes 中都有特定的含义,而这并不是您真正想要的。用户可以删除草稿,模板是完全不同的东西。所以让我们称之为样板消息。

我建议在 Domino 服务器上创建一个特殊的邮件数据库(NSF 文件),它只是作为样板文件的存储库。您可以在该邮件数据库中创建一个名为“Boilerplates”的文件夹。使用 Domino Designer,您可以修改该文件夹的设计,使主题列成为视图中的第一列,并对其进行排序。

完成此操作并创建一些样板并将它们保存在文件夹中后,您可以使用 VBA 进行 NotesSession.getDatabase 调用、NotesDatabase.getView 调用(用于文件夹和视图),然后使用 NotesView .getDocumentByKey() 按您分配给它的主题检索特定样板。请注意,您不必将此文档复制到用户的邮件数据库即可发送邮件。

于 2013-11-03T23:05:14.917 回答
0

富文本并不难使用,但您需要查看 Domino Designer 帮助,尤其是 NotesRichTextItem 和 NotesRichTextStyle 类。您还需要了解 DOM(Domino 对象模型)。然后您可以以编程方式创建您的邮件内容。

否则,我认为 Richard 的解决方案是最好的,您有一个单独的数据库,您可以在其中获取富文本片段,并使用 NotesRichText 类的 AppendRTItem 方法将其放入您的电子邮件中。

于 2013-11-04T15:09:26.653 回答