You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA调用Lotus Notes发送MIME附件:PDF无法打开求助

Lotus Notes VBA发送PDF附件无法打开问题排查求助

我用VBA编写了通过Lotus Notes发送带两个附件的邮件,借助MIME实现了HTML正文和两种不同附件的添加,但目前遇到问题:HTML正文可正常显示,PDF附件却无法打开并报错。

邮件头差异对比

手动发送正常PDF附件的邮件头(附件部分):

--=<em>alternative 002FD1AF802588B4</em>=--
--=<em>mixed 002FD1AF802588B4</em>=
Content-Type: application/octet-stream; name="Import Declaration Report (GGRFXT2208000000001019).pdf"
Content-Disposition: attachment; filename="Import Declaration Report (GGRFXT2208000000001019).pdf"
Content-Transfer-Encoding: base64

自动发送的邮件头(附件部分):

--==IFJRGLKFGIR38462UHRUHIHD
Content-Type: application/octet-stream
Content-Disposition: attachment;
filename=Import Declaration Report (GGRFXT2208000000001019).pdf

--==IFJRGLKFGIR38462UHRUHIHD--

相关VBA代码

Public Sub COM_Email_Send()

Dim NSession As Object
Dim NMailDb As Object
Dim NDocument As Object
Dim NBody As Object
Dim NChild As Object
Dim Nstream As Object
Dim Header As Object
Dim HeaderChild As Object
Dim NParent As Object
Dim NMime As Object

Dim i As Long
Dim Row As Long
Dim Recipient As String
Dim File As String
Dim attachmentFile As String
Dim Data As String
Dim AttachedOb As Object
Dim EmbedOb As Object
Dim NHeader As Object
Dim strFileType As Variant
Dim MIMEDoc As Object

Set NSession = CreateObject("Lotus.NotesSession")
Call NSession.Initialize("password")

Set NMailDb = NSession.GetDatabase("Directory", "Server")
If Not NMailDb.IsOpen = True Then
Call NMailDb.Open
End If

    Row = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To Row
    
    Recipient = Worksheets("Sheet1").Range("B" & i)
    
    If Recipient <> "" Then
    
    
    File = Worksheets("Sheet1").Range("A" & i).Value
    
    attachmentFile = "Directory" & File
    
    Data = Format(Now(), "dd/mm/yyyy")
    
    NSession.ConvertMIME = False
    
    Set Nstream = NSession.CreateStream
    Set NDocument = NMailDb.CreateDocument
    
    
    Call NDocument.replaceitemvalue("Form", "Memo")
    Call NDocument.replaceitemvalue("SendTo", Recipient)
    Call NDocument.replaceitemvalue("Subject", "Please see your clearance documents attached " & Data)
    Call NDocument.replaceitemvalue("Sender", "noreply@Dachser.com")
    
    
    Set NMime = NDocument.CreateMIMEEntity("Body")
    Set NParent = NMime.CreateParentEntity
    
    
    Call Nstream.Open("Directory")
    
    Set MIMEDoc = NParent.CreateChildEntity()
    Call Nstream.WriteText(strBody)
    Call MIMEDoc.SetContentFromText(Nstream, "text/html;charset=iso-8859-1", 1725)
    Call Nstream.Close
    Call Nstream.Truncate
    
    
    Set MIMEDoc = NParent.CreateChildEntity()
    
    Set HeaderChild = MIMEDoc.Createheader("Content-Disposition")
    Call HeaderChild.SetHeaderVal("attachment; filename=" & File)
    
    Set HeaderChild = MIMEDoc.Createheader("Content-Type")
    Call HeaderChild.SetHeaderVal("application/pdf")
    
    Set Nstream = NSession.CreateStream()
    
    If Not Nstream.Open("Directory", "binary") Then
    MsgBox ("Open Failed")
    End If
    
    
    Call MIMEDoc.SetContentFromBytes(Nstream, "application/pdf", 1727)
    
    
    
    Call Nstream.Close
    Call Nstream.Truncate
    
    NDocument.savemessageonsend = True
    
    Call NDocument.replaceitemvalue("PostedDate", Now())
    
    
    Call NDocument.Send(False)
    

    Set NDocument = Nothing
    Set Nstream = Nothing
    
    End If
    Next i
    
NSession.ConvertMIME = True
End Sub

问题补充

  • 发现SetContentFromBytes会将Content-Transfer-Encoding从ENC_BASE64覆盖为ENC_NONE,尝试使用Domino.MIME_ENCODING.ENC_BASE64会报错,询问如何在SetContentFromBytes中设置BASE64编码。
  • 已通过数字声明编码解决上述编码问题,但PDF仍无法打开,求助解决办法。

内容的提问来源于stack exchange,提问作者Drawleeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:31:06