Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Excel从Lotus Notes发送电子邮件并附带附件&;HTML正文_Html_Email_Vba_Attachment_Lotus - Fatal编程技术网

使用Excel从Lotus Notes发送电子邮件并附带附件&;HTML正文

使用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

好的,我正试图通过lotus notes发送一封来自excel电子表格的电子邮件,它有一个附件,正文需要是HTML格式

我有一些代码,从我读过的所有代码来看,应该允许我这样做,但是它不允许。 没有附件将发送的HTML正文,当我实现电子邮件仍然发送但附件消失的HTML正文时,我尝试重新调整代码的顺序,删除可能不需要但已全部插入的部分

(您需要引用LotusDomino对象来运行此代码。 strEmail是电子邮件地址 strAttach是附件的字符串位置 strSubject是主题文本 strBody是正文 )

端接头

如果有人能给我指出正确的方向,我将不胜感激

编辑:
我做了更多的调查,发现了一个奇怪的现象,如果我看一下“已发送”文件夹,所有电子邮件都有一个带有附件的回形针图标,即使当你进入电子邮件时,即使在“已发送”文件夹中,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")