lotus-notes - 如何使用 lotusscript 在电子邮件中嵌入图像?
问题描述
我有一个类,它有一种使用 HTML 发送电子邮件的方法。此方法将图像(如附件)包含到电子邮件中。
我有一个带有富文本字段的表单,用户将在其中附加图像。
我有一个问题:
- 我需要嵌入到电子邮件中的图像显示,并且必须在正确的位置。附件出现在开头。
- 和其他问题:该方法没有指定富文本字段。所以我需要知道如何只显示一个特定的字段。
发送 HTML 邮件的方法
' Sub to send an email with attachments
Public Sub SendEmailHTMLAttachments()
' General variables
Dim ws As New NotesUIWorkspace
Dim ns As New NotesSession
Dim maildoc As NotesDocument
Dim doc As NotesDocument
Dim body As NotesMIMEEntity
Dim mh As NotesMIMEHeader
Dim mc As NotesMIMEEntity
Dim stream As NotesStream
Dim link As New Link
Set maildoc = ws.Currentdocument.Document
Set doc = ws.Currentdocument.Document
' Dont convert text to rich text
ns.ConvertMIME = False
' Configure the mail
maildoc.Form = "Memo"
maildoc.Subject = me.m_subject
maildoc.SendTo = me.m_sendto
maildoc.CopyTo = me.m_sendtocc
maildoc.blindCopyTo = me.m_sendtobcc
' Create the MIME headers
Set body = maildoc.Createmimeentity
Set mh = body.Createheader({MIME-Version})
Call mh.Setheaderval("1.0")
Set mh = body.Createheader("Content-Type")
Call mh.Setheadervalandparams({multipart/alternative})
' Send the plain text part first
Set mc = body.Createchildentity()
Set stream = ns.Createstream()
Call mc.Setcontentfromtext(stream, {text/plain}, ENC_NONE)
' Now send the HTML part. Order is important!
Set mc = body.Createchildentity()
Set stream = ns.Createstream()
Call stream.Writetext(|<html lang="es">|)
Call stream.Writetext(|<head>|)
Call stream.Writetext(|<meta name="viewport" content="width=device-width, initial-scale=1.0">|)
Call stream.Writetext(|<meta http-equiv="X-UA-Compatible" content="ie=edge">|)
Call stream.Writetext(|</head>|)
Call stream.Writetext(|<body>|)
Call stream.Writetext(|<div style="background-color: #897d7d; border-radius: 0.5em; width: auto; height: 50px;">
<h1 style="color: white; text-align: center; padding: 0.1em;
font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;">| & me.m_header & |</h1>
</div>|)
Call stream.Writetext(|<p>| & me.m_body & |</p>|)
Call stream.Writetext(|<a href="| & link.GetLink() & |" target="_blank"
style="background-color: #A01314; color: white; padding: 14px 25px; text-align: center;
text-decoration: none; display: inline-block; border-radius: 1em;">Link to Form</a>|)
Call stream.Writetext(|</body>|)
Call stream.Writetext(|</html>|)
Call mc.Setcontentfromtext(stream, {text/html;charset="utf-8"}, ENC_NONE)
' Close the stream
Call stream.Close()
' Send it
Call maildoc.Send(False)
Delete link
End Sub
发送电子邮件的事件(按钮)
Sub Click(Source As Button)
Dim subject As String
Dim header As String
Dim body As String
Dim sendto(1 To 9) As String
Dim sendtocc(1 To 3) As String
Dim sendtobcc(1 To 3) As String
Dim alert As String
Dim flagalert As Boolean
subject = "Form Lotus Notes: Test"
header = "Form Lotus Notes: Test"
body = "This is an example email using <b>HTML</b>."
body = body + "<p>Url: <a href='www.google.es'>Google</a></p>."
sendto(1) = "people"
alert = ""
Dim msj As New Mensaje(subject, header, body, sendto, "", "", alert, False)
Call msj.SendEmailHTMLAttachments
Delete msj
End Sub
收到电子邮件时的示例
我究竟做错了什么?
解决方案
您做错的是您正在创建一个没有图像数据的多部分/替代消息,并且您依靠 Domino 以某种方式找出您真正想要做的事情。它不能。
您必须创建整个 MIME 消息,其中包含 multipart/related 和 multipart/alternative 部分的 multipart/mixed 部分。
multipart/related 部分必须包含具有 Content-disposition: Embedded 的图像/gif(或其他一些有效的图像格式)部分;filename=xxx,并且您需要将图像的编码字节流式传输到该部分——这并不容易,而且我没有代码来向您展示如何做到这一点。我认为 DXL 可能是大多数人处理这个问题的方式,尽管我很确定 MIDAS 富文本 API(不是免费的)使它更容易。
multipart/alternative 部分是您所拥有的,因为它包含您的 text/plain 和 text/html 部分,但您的 text/hteml 部分需要包含一个 img 标签,该标签正确引用了 multipart/related 内部的图像数据src=cid:xxx,其中 xxx 与您在 filename=xxx 中为图像输入的内容相匹配。
推荐阅读
- python - 为什么我需要更新与基地的连接?
- python-3.x - 如何在列表中附加多个字符串值(如果存在于列表中)
- javascript - 使用 String.replace() 时防止在 JavaScript 中替换 \n
- reactjs - ReactiveSearch(Web):一旦返回同一页面,分页就会重置
- linux - 我在 Chromebook 上安装 pygame 时遇到错误,更糟糕的是,网站已关闭?请告诉我为什么
- linux - 为什么 git 命令在脚本和终端中的工作方式不同?
- windows - 在 Windows 上安装 nvim_treesitter
- javascript - 即使在智能手机上也可以在拖动时移动项目
- javascript - 未捕获的类型错误:$(...).jstree 不是函数
- sql - 在文本字段中选择单词 - SQL server