我有一个类,它具有使用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消息,其中包含一个包含多部分/相关部分和一个多部分/替代部分的多部分/混合部分。
多部分/相关部分必须包含具有内容处置的图像/ gif(或其他有效图像格式)部分。 filename = xxx,并且您需要将图像的编码字节流式传输到该部分中-这并不容易,而且我没有代码向您展示如何做到这一点。我认为DXL可能是大多数人都采用的方法,尽管我很确定MIDAS Rich Text API(不是免费的)使它变得更加容易。
multipart / alternate部分就是您所拥有的,它包含text / plain和text / html部分,但是您的text / hteml部分需要包含一个img标记,该标记正确引用multipart /中的图像数据/使用src = cid:xxx进行关联,其中xxx与您在图像的filename = xxx中输入的内容匹配。
解决此问题的一种方法是使用apache commons email Java库https://commons.apache.org/proper/commons-email/