lotus-notes - Lotusscript MIME 电子邮件
问题描述
我修改了一个代码,我发现它可以发送带有附件的 MIME HTML 邮件。当邮件在 gmail 中打开时,它可以工作,但在 Apple Mail 或 Lotus Notes 中,正文中没有任何附件。明文部分也没有到达,但我感兴趣的是附件。
这是我的代码:
Set MailDoc = New NotesDocument( mailbox )
session.convertMIME = False
Dim body As NotesMIMEEntity
Dim mimeHeader As NotesMIMEHeader
Dim mimeEntity As NotesMIMEEntity
Dim stream As NotesStream
设置正文 = mailDoc.CreateMIMEEntity
Set mimeHeader = body.CreateHeader({MIME-Version})
Call mimeHeader.SetHeaderVal("1.0")
Set mimeHeader = body.CreateHeader("Content-Type")
Call mimeHeader.SetHeaderValAndParams({multipart/alternative;boundary="=NextPart_="})
' create another MIME part for the attachment. (repeat as needed)
If (docEval.HasItem("$File")) Then
Dim AttachmentsField As NotesRichTextItem
Set AttachmentsField = docEval.GetFirstItem( "fc_adjunto" )
If IsArray(AttachmentsField.EmbeddedObjects) Then ' Isarray validates for attachments ignoring embedded text
ForAll att In AttachmentsField.EmbeddedObjects
If att.Type = EMBED_ATTACHMENT Then
Call errorLog.LogAction("Inicio attch: " + att.Name())
Set mimeEntity = body.CreateChildEntity( )
Set mimeHeader = mimeEntity.CreateHeader("Content-Disposition")
aliasFilename = CStr(att.Name())
Call mimeHeader.SetHeaderValAndParams(|attachment; filename=| & aliasFilename)
Set stream = session.CreateStream
attachFilename = AttachToFile(session, docEval, CStr(att.Name())) 'Call o.ExtractFile(Attachfoldername & "\" & o.Name())
Call errorLog.LogAction("Inicio attch name: " + attachFilename)
stream.Open attachFileName, "binary"
Call mimeEntity.SetContentFromBytes(stream, "application/octet-stream", ENC_IDENTITY_BINARY)
mimeEntity.EncodeContent(ENC_BASE64)
Kill attachFilename
End If
End ForAll
End If
End If
'Send the plain text part first (this never work for me!!)
Set mimeEntity = body.createChildEntity()
Set stream = session.createStream()
Call WritePlainText(stream)
Call mimeEntity.setContentFromText(stream, {text/plain;charset="iso-8859-1"}, ENC_IDENTITY_8BIT)
'Send the HTML part.
Call stream.Truncate()
'Send the HTML part.
Set mimeEntity = body.createChildEntity()
Call WriteHTML(stream, elHtml)
Call mimeEntity.setContentFromText(stream, {text/html;charset="iso-8859-1"},ENC_IDENTITY_8BIT)
'Close the stream and Send it
Call stream.Truncate()
Call stream.Close()
Call maildoc.Closemimeentities(True)
Call MailDoc.ReplaceItemValue("EncryptOnSend" , True )
Call MailDoc.ReplaceItemValue("PostedDate" , Now )
Call MailDoc.ReplaceItemValue("From" , Remitente )
Call MailDoc.ReplaceItemValue("SendFrom" , Remitente )
Call MailDoc.ReplaceItemValue("Principal" , Remitente )
Call MailDoc.ReplaceItemValue( "SendTo" , sendTo )
Call MailDoc.ReplaceItemValue( "CopyTo" , copyTo )
Call MailDoc.ReplaceItemValue( "BlindCopyTo" , bccTo )
Call MailDoc.ReplaceItemValue( "Subject" , Subject )
Call MailDoc.save( True , False ) 'Send it
session.convertMIME = True
知道我会错过什么吗?谢谢
解决方案
在我看来,您只使用了多部分/替代部分。我没有看到多部分/混合部分。我相信你需要有一个这样的嵌套结构:
multipart/mixed
application/octet-stream
application/octet-stream (etc...)
multipart/alternative
text/plain
text/HTML
给自己发送一封看起来符合您要求的手工制作的电子邮件,并验证收到的邮件中的 MIME 标头,以确保我正确无误(Notes 客户端中的“查看 - 显示 - 页面源代码”或“ Show Original' in gmail),但我在自己的收件箱中查看了几封带有附件的邮件,它们都有这种结构。
推荐阅读
- azure - Azure 静态网站计数唯一客户端
- django-rest-framework - Django Rest Framework - 嵌套序列化程序 - 从列表中访问一个属性
- node.js - nodejs 的 pg-native 是否适用于 Heroku postgres?
- mysql - 返回每个组的最大值,但是当存在平局时,在 MySQL 中返回一个具有较低 id 的值
- javascript - 如何导入 socket.io npm 包 - Nodejs
- r - 试图扩大数据框,同时通过它们的因素交互两列
- php - Codeigniter 4分页与custome mysql查询
- php - 计算一个值出现多少次 PHP
- excel - “粘性”Excel 数据透视表切片器
- arrays - C 语言,动态 3d 数组