从 Excel VBA 发送格式化的 Lotus Notes 富文本电子邮件

2023-11-30

我对 Lotus Script 或 Notes/Domino 的了解很少,但我有一个很久以前从某处复制的过程,它允许我通过 VBA 通过 Notes 发送电子邮件。我通常只将其用于内部通知,其中格式并不重要。

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

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

我对“网络”进行了深入研究,看看这段代码是否可以改编,但由于不熟悉 Notes 的对象模型,而且在线 Notes 资源似乎反映了应用程序本身的迟钝性,这意味着我并没有得到很好的帮助。远的。

代码:


Sub sendEmail(EmailSubject As String, EMailSendTo As String, EMailBody As String, MailServer as String)

    Dim objNotesSession As Object
    Dim objNotesMailFile As Object
    Dim objNotesDocument As Object
    Dim objNotesField As Object
    Dim sendmail As Boolean

    'added for integration into reporting tool
    Dim dbString As String

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

On Error GoTo SendMailError
    'Establish Connection to Notes
    Set objNotesSession = CreateObject("Notes.NotesSession")
On Error Resume Next
    'Establish Connection to Mail File
    Set objNotesMailFile = objNotesSession.GETDATABASE(MailServer, dbString)
    'Open Mail
    objNotesMailFile.OPENMAIL
On Error GoTo 0

    'Create New Memo
    Set objNotesDocument = objNotesMailFile.createdocument

    Dim oWorkSpace As Object, oUIdoc As Object
    Set oWorkSpace = CreateObject("Notes.NotesUIWorkspace")
    Set oUIdoc = oWorkSpace.CurrentDocument

    'Create 'Subject Field'
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("Subject", EmailSubject)

    'Create 'Send To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("SendTo", EMailSendTo)

    'Create 'Copy To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("CopyTo", EMailCCTo)

    'Create 'Blind Copy To' Field
    Set objNotesField = objNotesDocument.APPENDITEMVALUE("BlindCopyTo", EMailBCCTo)

    'Create 'Body' of memo
    Set objNotesField = objNotesDocument.CREATERICHTEXTITEM("Body")

    With objNotesField
        .APPENDTEXT emailBody
        .ADDNEWLINE 1
    End With

    'Send the e-mail

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

    'Release storage
    Set objNotesSession = Nothing
    Set objNotesMailFile = Nothing
    Set objNotesDocument = Nothing
    Set objNotesField = Nothing

    'Set return code
    sendmail = True

    Exit Sub

SendMailError:
    Dim Msg
    Msg = "Error # " & Str(Err.Number) & " was generated by " _
                & Err.Source & Chr(13) & Err.Description
    MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
    sendmail = False
End Sub  

简短的回答是肯定的。冗长的答案令人痛苦。没有任何优秀的类可以用来操作 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 代理中工作得很好。

我希望这有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Excel VBA 发送格式化的 Lotus Notes 富文本电子邮件 的相关文章

  • 具有日期和名称标准的 SUMIFS...仅限月份和年份

    我正在尝试获取 SUMIFS 公式来检查日期列 并仅对与标准日期的匹配年份和月份相对应的值求和 我还希望此 SUMIFS 包含名称标准和日期 IE 单元格 A1 SUMIFS Sheet1 O O Sheet1 D D Sheet2 DAT
  • 宏VBA获取Outlook 2003中选定的文本

    我正在尝试使用此代码片段来获取 Outlook 2003 中选定的文本 Sub SelectedTextDispaly On Error Resume Next Err Clear Dim oText As TextRange Get an
  • Excel 2007 问题:预编程按钮突然不起作用[重复]

    这个问题在这里已经有答案了 今天 出乎意料的是 我工作的公司使用的表格的按钮突然出现了问题 奇怪的是 它只影响我确信是 ActiveX 命令按钮的部分 而不会导致其他形状或下拉菜单出现问题 问题 按钮没有反应 当您单击时 他们不会访问代码
  • Excel VSTO 加载项可以与 Excel 2007 和 2010 兼容吗?

    是否可以使用 VSTO 开发一个可部署到 Excel 2007 和 2010 的 Excel 加载项 任何有关此主题的详细资源的链接也将不胜感激 我似乎无法在谷歌上找到任何专门解决此问题的内容 我正在使用 Visual Studio 201
  • VBA Word - 更改小数点分隔符

    我周围的一些人在 Windows Office 中使用国家本地化 不幸的是 这导致我的宏无法执行简单的数学运算 因为它们使用逗号表示小数位置 而我编辑的 pov ray 文件仅使用逗号作为列表分隔符 使用点表示小数点 1 我知道在 Exce
  • SSIS Excel 文件问题 - 创建文件失败

    我有 SSIS 包 可以抓取 excel 文件并将其加载到 sql 表中 运行它时出现以下错误 我尝试将 64 位运行设置为 false 那不起作用 我还安装了 64 位访问驱动程序引擎 这也没有帮助 数据流任务 Excel 源 2 出错
  • 从单元格复制时省略引号

    Problem 当从程序外部的 Excel 复制单元格时 会自动添加双引号 Details 我在 Windows 7 计算机上使用 Excel 2007 如果我有一个具有以下公式的单元格 1 CHAR 9 SOME NOTES FOR LI
  • 当第二个工作表中存在值时删除整行

    我有 2 张纸 sheet1 和sheet2 我在单元格 A3 sheet1 中有一个值 该值不是恒定的 Sheets2 中还有许多文件 我想做的是 当单元格 A3 Sheet1 中的值与 A 列 Sheet2 中的值相同时 它将删除找到该
  • 保护 Excel VBA 代码的最佳方法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经整理了一个简单的 Excel 数据库 该数据库执行一些宏函数 并且我需要将此数据库分发给几个人 但他们无法看到宏函数实际上是如何
  • VBA 代码基准测试

    对 VBA 代码进行基准测试最准确的方法是什么 在我的例子中 我正在 Excel 中测试代码 除了下面的 2 种之外 还有其他对代码进行基准测试的技术吗 如果有 该方法的优点 缺点是什么 这里有两种流行的方法 First Timer Sub
  • 转置 CopyFromRecordset Excel VBA

    我的 Excel VBA 中有以下代码 可将 SQL 中的表中的数据复制到 Excel 中 该数据从单元格 C2 开始水平插入 但我希望将其垂直插入到 C 列 Sheets Control Range C2 CopyFromRecorset
  • 如何使用Python更改Excel中的列格式

    我想使用 openpyxl 方法将一张纸上的特定行和列复制到另一张纸上 但我的主要 Excel 文件是 xlsb 文件 而 openpyxl 不支持 xlsb 文件 所以我构建了这种复杂的方式 根据公司规则 我无法从 Microsoft E
  • 如何在 VB.NET 中将 DataGridView 导出为 Excel 格式

    我使用 OLE 通过 VB NET 连接到数据库 并在 DataGridView 中显示结果 我想将 DataGridView 中的数据导出到 Excel 格式文件 即用户可以将 DataGridView 的内容保存为 MS Excel 文
  • 如何从 jQuery 获取 ajax 请求下载 Excel

    我有一个 Spring MVC 视图 它提供了一个 excel 文件 但是 我现在修改了该过程 以便用户获得一个模式框 他们可以在下载 excel 之前在其中选择一些选项 这些选定的选项将发送到视图 我的请求看起来像这样 get downl
  • 如何循环浏览文件夹内所有工作簿中的所有工作表

    我使用宏对计算机上给定文件夹中每个工作簿的每张工作表进行更改 事件顺序 打开用户选择的文件夹中的每个 Excel 文件 在工作簿中的每个工作表上执行任务 保存文件 关闭工作簿 宏不起作用 问题似乎是由Selection AutoFilter
  • 是否有 R 函数可以将这些数据从长形重塑为宽形?

    数据现在看起来如何 Coach ID Student score 1 A 8 1 B 3 2 A 5 2 B 4 2 C 7 看起来像这样 Coach ID Student score student 2 score 2 student 3
  • 用一行代码隐藏所有自动筛选下拉列表

    我有一个相当大的 Excel 文件 其中包含大量数据 我使用验证列表 该列表通过 VBA 生成过滤器 因为我有 52 列 一年中的每周一列 所以我会自动在每个标题中看到一个小下拉箭头 我使用这段代码手动隐藏每列的下拉箭头 Worksheet
  • INDEX 和 SMALL 只返回一个结果

    我写的 Excel 公式如下 但有错误 IFERROR INDEX Testbook2 xlsx Sheet1 A 2 B 6 SMALL IF Testbook2 xlsx Sheet1 B 2 B 6 A ROW Testbook2 x
  • 如何以可读的方式重写Excel公式?

    我有一个 Excel 文件 其中包含以下公式 IF OR ISERROR G16 ISERROR G17 X16 IF OR G16 xxx G16 yyy G16 zzz Y16 IF G16 333 N A IF G17 333 Z16
  • GetActiveObject() 与 GetObject() -- MK_E_UNAVAILABLE 错误

    All 我在将一些 VBA 代码转换为 C 时遇到一些问题 我们有一个充当本地 COM 服务器的第 3 方应用程序 在我们使用的VBA代码中获取对象 获取对现有对象的引用 e g Set appHandle GetObject ProgId

随机推荐

  • 如何让 MutationObserver 多次工作?

    我使用 MutationObserver 这样我就可以让 div 对变化做出反应 当它更改时 更改将显示在正下方的 div 中 但它只运行一次 如果我输入一些内容来 div 输入 div 则仅显示第一个字符 我在 MDN 上找到了这个 向元
  • 如何在 Tensorflow 中更新 2D 张量的子集?

    我想更新 2D 张量中值为 0 的索引 因此 data 是一个 2D 张量 其第二行第二列索引值将替换为 0 但是 我收到类型错误 有人可以帮我吗 类型错误 ScatterUpdate 操作的输入 ref 需要左值输入 data tf Va
  • 从其他常量构建常量变量列表

    我刚刚读完全部Objective C 全局常量变量问答 但我发现它们不适合我的问题 我需要一个像这样的变量列表 NSString baseURL http example org NSString mediaURL http example
  • 如何在PHP中使用换行符发送电子邮件

    请帮我在换行符中制作代码消息 我不知道该怎么做 请检查我的代码 希望你能帮助我 预先非常感谢
  • 使用全局变量会影响 MATLAB 的性能吗?

    据我了解 MATLAB不能使用pass by reference向其他函数发送参数时 我正在进行音频处理 并且经常需要将波形作为参数传递给函数 并且因为 MATLAB 使用pass by value对于这些论点 当我这样做时 它确实消耗了大
  • Spring Data REST:MongoDB 存储库的自定义查询

    我正在尝试创建一个自定义查询Spring 指南 使用 REST 访问 MongoDB 数据根据参考4 4 自定义实现 但我的自定义方法无法从存储库的 REST 接口 user search 中使用 例如浏览器无法找到 localhost 8
  • 保持 CSS 网格中列之间的比例。 grid-column是如何计算的?

    我希望我的网格保持一定的比例 但是长句子会增加它所属网格的宽度 body display grid main grid column 1 8 border 2px solid black aside grid column 8 13 bor
  • 将一张图像旋转到另一张图像下方

    我目前正在尝试旋转图像 然后在不旋转的顶部绘制图像 但每当我使用 g2d rotate Math toRadians rot x 15 y 15 我之后绘制的每张图像也会旋转 有什么方法可以旋转一张图像而不旋转其余图像 天哪 这真的很难解释
  • Delphi TWebBrowser 在 AJAX 加载后获取 HTML 源

    我有以下函数 可以在 DocumentComplete 事件之后获取 HTML 文档的源代码 function TBrowser GetWebBrowserHTML const WebBrowser TWebBrowser string v
  • javascript 中有 getElementsByClassName 吗?

    就像在 jQuery 中我们可以使用 classname 一样 在 javascript 中也有类似的东西吗 或者如果我们没有这样的方法那么我该如何实现它 根据http www dustindiaz com getelementsbycla
  • 在 Less 中将 px 转换为 em

    Scss 相当于什么emCalc 不到 padding emCalc 24px 在Scss中将根据视点和缩放级别计算em less中有内置函数吗 您可以这样做将 px 转换为 em font size 16 Your base font s
  • 为什么子任务的许多异常中只传播其中之一?

    我正在努力更好地掌握 TPL 中异常和错误处理的基本原理 并且在 NET 4 5 异步 等待任务中运气更好 The slightly modified from my earlier question How to better under
  • rand() 在多个函数调用中保持一致

    当我尝试从函数调用中生成 2 个随机数时 我得到了重复的结果 但是 那rand 函数在循环或其他函数中工作得很好 只要它们在函数调用之外 我猜这是因为系统时间和程序很小 但我不知道还有什么办法可以改变种子 include
  • Playframework + Tomcat 部署问题

    我正在尝试在 Tomcat 中部署一个在 play 框架中开发的 Web 应用程序 前几次尝试时 我在 Tomcat 控制台中收到以下消息 INFO validateJarFile C Tomcat7 webapps sandbox war
  • 用户注销(从其他屏幕)时如何重置 TabNavigator

    这是我的项目文件层次结构 RootTabNavigator AuthStackNavigator I want to go back to this navigator AuthoScreen Welcome Screen MainTabN
  • 在 C++ 中将 32 位数字拆分为字节的最快方法

    我正在编写一段代码 旨在对 CLSID 结构进行一些数据压缩 我将它们存储为 128 位整数的压缩流 但是 相关代码必须能够将无效的 CLSID 放入流中 为了做到这一点 我把它们留作一根大绳子 在磁盘上 它看起来像这样 Length of
  • 在 WPF 中的 ListView 中填充 ComboBox

    I have populated a ComboBox inside a ListView Screen shot is given below 如上所示 它显示 M a c 而不是 Mac 为什么要将单词分成字符 在我写的文件后面的代码中
  • 带有后台页面的 Chrome 扩展程序无法与清单版本 2 配合使用

    我有一个简单的 Chrome 扩展 它在 Google Chrome 中显示一个小图标 单击后 它会加载我网站的搜索页面 这会将您重定向到正确的页面 https chrome google com webstore detail w3pat
  • Vue2:将函数作为 prop 传递会触发 prop 已设置的警告

    我是 Vue 新手 到目前为止我很喜欢单文件组件 在制作我真正想做的东西之前 我想我会尝试一些小事情来看看我是否掌握了这个概念 因此 我开始制作一个用于打开 XMLHttpRequest 的组件 并带有进度条
  • 从 Excel VBA 发送格式化的 Lotus Notes 富文本电子邮件

    我对 Lotus Script 或 Notes Domino 的了解很少 但我有一个很久以前从某处复制的过程 它允许我通过 VBA 通过 Notes 发送电子邮件 我通常只将其用于内部通知 其中格式并不重要 我现在想用它向客户发送外部电子邮