10

我几乎没有 Lotus Script 或 Notes/Domino 知识,但我有一个程序,很久以前从某个地方复制的,它允许我通过 VBA 的 Notes 发送电子邮件。我通常只将它用于格式并不重要的内部通知。

我现在想用它来向客户发送外部电子邮件,而公司类型更希望电子邮件符合我们的样式指南(基本上是无衬线字体)。

我正要告诉他们该代码仅适用于纯文本,但后来我注意到该例程确实引用了某种 CREATERICHTEXTITEM 对象。这是否意味着我可以在正文字符串传递给邮件例程对其应用某种格式?除了维护我们宝贵的品牌价值外,这对我强调电子邮件中的某些段落非常方便。

我对“网络”进行了深入研究,以查看是否可以修改此代码,但不熟悉 Notes 的对象模型,并且在线 Notes 资源似乎反映了应用程序自身的迟钝这一事实,这意味着我没有得到远的。

编码:

Sub sendEmail(EmailSubject 作为字符串,EMailSendTo 作为字符串,EMailBody 作为字符串,MailServer 作为字符串)

    将 objNotesSession 调暗为对象
    将 objNotesMailFile 调暗为对象
    将 objNotesDocument 调暗为对象
    将 objNotesField 调暗为对象
    将 sendmail 调暗为布尔值

    '添加用于集成到报告工具中
    将 dbString 调暗为字符串

    dbString = "mail\" & Application.UserName & ".nsf"

出错时转到 SendMailError
    '建立与笔记的连接
    设置 objNotesSession = CreateObject("Notes.NotesSession")
出错时继续下一步
    '建立与邮件文件的连接
    设置 objNotesMailFile = objNotesSession.GETDATABASE(MailServer, dbString)
    '打开邮件
    objNotesMailFile.OPENMAIL
错误转到 0

    '创建新备忘录
    设置 objNotesDocument = objNotesMailFile.createdocument

    将 oWorkSpace 作为对象,oUIdoc 作为对象
    设置 oWorkSpace = CreateObject("Notes.NotesUIWorkspace")
    设置 oUIdoc = oWorkSpace.CurrentDocument

    '创建'主题字段'
    设置 objNotesField = objNotesDocument.APPENDITEMVALUE("Subject", EmailSubject)

    '创建'发送到'字段
    设置 objNotesField = objNotesDocument.APPENDITEMVALUE("SendTo", EMailSendTo)

    '创建'复制到'字段
    设置 objNotesField = objNotesDocument.APPENDITEMVALUE("CopyTo", EMailCCTo)

    '创建'盲复制到'字段
    设置 objNotesField = objNotesDocument.APPENDITEMVALUE("BlindCopyTo", EMailBCCTo)

    “创建”备忘录的“正文”
    设置 objNotesField = objNotesDocument.CREATERICHTEXTITEM("Body")

    使用 objNotesField
        .APPENDTEXT 电子邮件正文
        .ADDNEWLINE 1
    结束于

    '发送电子邮件

    调用 objNotesDocument.Save(True, False, False)
    objNotesDocument.SaveMessageOnSend = True
    'objNotesDocument.Save
    objNotesDocument.Send (0)

    '释放存储
    设置 objNotesSession = 无
    设置 objNotesMailFile = 无
    设置 objNotesDocument = 无
    设置 objNotesField = 无

    '设置返回码
    发送邮件 = 真

    退出子

发送邮件错误:
    暗消息
    Msg = "Error # " & Str(Err.Number) & " 由 " _ 生成
                & Err.Source & Chr(13) & Err.Description
    MsgBox Msg, , "错误", Err.HelpFile, Err.HelpContext
    发送邮件 = 假
结束子
4

3 回答 3

10

简短的回答是肯定的。长长的回答是痛苦的。没有任何优秀的类可以用来操作 Notes 中的富文本项。但是,您可以研究的一些是 NotesRichTextStyle、NotesRichTextParagraphStyle 和 NotesRichTextTable 等等。这些类帮助您定义一些富文本元素并以编程方式将它们添加到富文本字段中。

由于您要发送电子邮件,因此另一种方法是使用 NotesMIMEEntity 类并使用 HTML 构建电子邮件(更容易)。这是一些示例代码:

Set s = New NotesSession
Dim docMail As NotesDocument
Dim body As NotesMIMEEntity
Dim stream As NotesStream

Set db = s.CurrentDatabase
s.ConvertMIME = False ' Do not convert MIME to rich text

'Create email to be sent
Set docMail = db.CreateDocument

With docMail
        .SendTo = SEND TO ADDRESS
        .From = FROM ADDRESS
        .Principal = FROM ADDRESS
        .ReplyTo = REPLY TO ADDRESS
        .Subject = SUBJECT
        .Form = "Memo"
End With

  Set stream = s.CreateStream
Set body = docMail.CreateMIMEEntity
Call stream.WriteText ("YOUR HTML CODE GOES HERE")

'ENC_IDENTITY_8BIT used because of technote found on notes.net
'http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/aeedaf28e47546ad85256f6a000a4b48?OpenDocument
Call body.SetContentFromText (stream, "text/html;charset=iso-8859-1",ENC_IDENTITY_8BIT) 

Call docMail.Send(False)
Set docMail = Nothing
Set body = Nothing
Set stream = Nothing

s.ConvertMIME = True ' Restore conversion   

本质上,您需要在 NotesSession 中关闭 ConvertMIME 设置。然后创建一个新文档,设置邮件属性等。该部分已经在您的 VBA 代码中。接下来,创建 MIMEEntity 和一个流来保存您的 HTML 文本。最后在您的 MIMEEntity 对象上调用 SetContentFromText 方法。然后发送您的电子邮件。请注意,最后一次调用是为 NotesSession 重新打开 ConvertMIME 功能。

我不确定这是否都可以通过 COM 工作,但它在 Notes 的 LotusScript 代理中运行良好。

我希望这有帮助!

于 2009-03-26T17:00:25.373 回答
0

我喜欢它的本来面目。但是,我不得不更改 dbString = "mail\" & Application.UserName & ".nsf"dbString = "mail\" & Application.CurrentUser & ".nsf"

第一条评论:我希望在发送时不必打开 Lotus Notes。

第二条评论:我希望我可以更改电子邮件的发件人(即,如果我要向 50 人发送报告,我希望它来自一个通用地址,而不是我的工作地址)

于 2010-03-05T16:08:29.127 回答
0

要更改它的来源,请创建一个通用 Notes ID(例如 Auto Send/YourCompany)并使用该 ID 保存代理。

于 2010-06-03T02:10:59.477 回答