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
相关产品推荐
相关产品推荐

