首页 > 解决方案 > 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

知道我会错过什么吗?谢谢

标签: lotus-noteslotusscript

解决方案


在我看来,您只使用了多部分/替代部分。我没有看到多部分/混合部分。我相信你需要有一个这样的嵌套结构:

 multipart/mixed
   application/octet-stream
   application/octet-stream (etc...)
   multipart/alternative
     text/plain
     text/HTML

给自己发送一封看起来符合您要求的手工制作的电子邮件,并验证收到的邮件中的 MIME 标头,以确保我正确无误(Notes 客户端中的“查看 - 显示 - 页面源代码”或“ Show Original' in gmail),但我在自己的收件箱中查看了几封带有附件的邮件,它们都有这种结构。


推荐阅读