使用Excel从Lotus Notes发送电子邮件并附带附件&;HTML正文
好的,我正试图通过lotus notes发送一封来自excel电子表格的电子邮件,它有一个附件,正文需要是HTML格式 我有一些代码,从我读过的所有代码来看,应该允许我这样做,但是它不允许。 没有附件将发送的HTML正文,当我实现电子邮件仍然发送但附件消失的HTML正文时,我尝试重新调整代码的顺序,删除可能不需要但已全部插入的部分 (您需要引用LotusDomino对象来运行此代码。 strEmail是电子邮件地址 strAttach是附件的字符串位置 strSubject是主题文本 strBody是正文 ) 端接头 如果有人能给我指出正确的方向,我将不胜感激 编辑:使用Excel从Lotus Notes发送电子邮件并附带附件&;HTML正文,html,email,vba,attachment,lotus,Html,Email,Vba,Attachment,Lotus,好的,我正试图通过lotus notes发送一封来自excel电子表格的电子邮件,它有一个附件,正文需要是HTML格式 我有一些代码,从我读过的所有代码来看,应该允许我这样做,但是它不允许。 没有附件将发送的HTML正文,当我实现电子邮件仍然发送但附件消失的HTML正文时,我尝试重新调整代码的顺序,删除可能不需要但已全部插入的部分 (您需要引用LotusDomino对象来运行此代码。 strEmail是电子邮件地址 strAttach是附件的字符串位置 strSubject是主题文本 strBo
我做了更多的调查,发现了一个奇怪的现象,如果我看一下“已发送”文件夹,所有电子邮件都有一个带有附件的回形针图标,即使当你进入电子邮件时,即使在“已发送”文件夹中,HTML也没有显示附件。我已经设法解决了自己的问题 在HTML中创建MIME条目和流的方法与附件相同,您还需要将它们都放在电子邮件本身内的MIME条目中,以将HTML和附件保持在同一级别,否则最终会出现电子邮件的正文和附件的子条目(位于另一个附件中)的情况。(这很奇怪,但却是真的) 因此,这就是我的解决方案:
Sub Send_Lotus_Email(Addresses, Attach, strSubject, strBody)
'Declare Variables
Dim s As Object
Dim db As Object
Dim body As Object
Dim bodyChild As Object
Dim header As Object
Dim stream As Object
Dim host As String
Dim message As Object
' Notes variables
Set s = CreateObject("Notes.NotesSession")
Set db = s.CurrentDatabase
Set stream = s.CreateStream
' Turn off auto conversion to rtf
s.ConvertMIME = False
' Create message
Set message = db.CreateDocument
message.Form = "memo"
message.Subject = strSubject
message.SendTo = Addresses
message.SaveMessageOnSend = True
' Create the body to hold HTML and attachment
Set body = message.CreateMIMEEntity
'Child mime entity which is going to contain the HTML which we put in the stream
Set bodyChild = body.CreateChildEntity()
Call stream.WriteText(strBody)
Call bodyChild.SetContentFromText(stream, "text/html;charset=iso-8859-1", ENC_NONE)
Call stream.Close
Call stream.Truncate
' This will run though an array of attachment paths and add them to the email
For i = 0 To UBound(Attach)
strAttach = Attach(i)
If Len(strAttach) > 0 And Len(Dir(strAttach)) > 0 Then
' Get the attachment file name
pos = InStrRev(strAttach, "\")
Filename = Right(strAttach, Len(strAttach) - pos)
'A new child mime entity to hold a file attachment
Set bodyChild = body.CreateChildEntity()
Set header = bodyChild.CreateHeader("Content-Type")
Call header.SetHeaderVal("multipart/mixed")
Set header = bodyChild.CreateHeader("Content-Disposition")
Call header.SetHeaderVal("attachment; filename=" & Filename)
Set header = bodyChild.CreateHeader("Content-ID")
Call header.SetHeaderVal(Filename)
Set stream = s.CreateStream()
If Not stream.Open(strAttach, "binary") Then
MsgBox "Open failed"
End If
If stream.Bytes = 0 Then
MsgBox "File has no content"
End If
Call bodyChild.SetContentFromBytes(stream, "application/msexcel", ENC_IDENTITY_BINARY)' All my attachments are excel this would need changing depensding on your attachments.
End If
Next
'Send the email
Call message.Send(False)
s.ConvertMIME = True ' Restore conversion
End Sub
不,对不起,我没有。我在VBA中运行它,它不是强类型的,所以我可以不知道主体标识的实际变量类型。我无法测试这个,但我相信您需要将声明重置为
Dim bodyChild As notemeentity
这是一个你有麻烦的人与下面你可能会发现导致问题以及
Dim s As New NotesSession
Dim db As NotesDatabase
Dim body As NotesMIMEEntity
Dim header As NotesMIMEHeader
Dim stream As NotesStream
Dim host As String
Dim message As NotesDocument
希望这有帮助这是我的实际代码。我甚至没有使用强类型
Dim mobjNotesSession As Object ' Back-end session reference'
Dim bConvertMime As Boolean
Dim stream As Object
Dim mimeHtmlPart As Object
Const ENC_QUOTED_PRINTABLE = 1726
mobjNotesSession = CreateObject("Lotus.NotesSession")
mobjNotesSession.Initialize()
mobjNotesDatabase = mobjNotesSession.GetDatabase("HQ2", "tim4")
mobjNotesDocument = mobjNotesDatabase.CreateDocument
bConvertMime = mobjNotesSession.ConvertMime
mobjNotesSession.ConvertMime = False
stream = mobjNotesSession.CreateStream()
Call stream.WriteText(txtBody.Text)
mobjNotesBody = mobjNotesDocument.CreateMIMEEntity("Body")
mimeHtmlPart = mobjNotesBody.CreateChildEntity() 'This returns "Type Mismatch" error'
Call mimeHtmlPart.SetContentFromText(stream, "text/html; charset=""iso-8859-1""", ENC_QUOTED_PRINTABLE)
Call stream.Close()
mobjNotesSession.ConvertMime = bConvertMime
Call mobjNotesDocument.CloseMIMEEntities(True, "Body")
Dim mobjNotesSession As Object ' Back-end session reference'
Dim bConvertMime As Boolean
Dim stream As Object
Dim mimeHtmlPart As Object
Const ENC_QUOTED_PRINTABLE = 1726
mobjNotesSession = CreateObject("Lotus.NotesSession")
mobjNotesSession.Initialize()
mobjNotesDatabase = mobjNotesSession.GetDatabase("HQ2", "tim4")
mobjNotesDocument = mobjNotesDatabase.CreateDocument
bConvertMime = mobjNotesSession.ConvertMime
mobjNotesSession.ConvertMime = False
stream = mobjNotesSession.CreateStream()
Call stream.WriteText(txtBody.Text)
mobjNotesBody = mobjNotesDocument.CreateMIMEEntity("Body")
mimeHtmlPart = mobjNotesBody.CreateChildEntity() 'This returns "Type Mismatch" error'
Call mimeHtmlPart.SetContentFromText(stream, "text/html; charset=""iso-8859-1""", ENC_QUOTED_PRINTABLE)
Call stream.Close()
mobjNotesSession.ConvertMime = bConvertMime
Call mobjNotesDocument.CloseMIMEEntities(True, "Body")