SendGrid-Anhänge sind leer oder beschädigt, wenn API (VBA) verwendet wird

Dies scheint ein ständiges Problem mit der SendGrid-Web-API und dem Versenden von E-Mail-Anhängen zu sein. Ich habe viele, viele Posts im Internet gefunden, bei denen alle dasselbe Problem haben ... aber keiner von ihnen scheint mit einer Lösung beantwortet zu werden. Die vordefinierte Antwort von SendGrid ist die Verwendung einer ihrer Bibliotheken. Es bleibt jedoch die Frage, wie Sie Dateien anhängen, wenn Sie eine Sprache verwenden, die keine Bibliothek enthält.

Ich habe versucht, mich in dieser Angelegenheit an den SendGrid-Support zu wenden. Ich habe sogar angeboten, für den Support zu zahlen, um eine Antwort zu erhalten, aber sie dachten, ich würde nach einer "Codeüberprüfung" fragen, was ich nicht war. Die Frage lautet einfach: Was wird zum Hochladen von Anhängen an die SendGrid-Web-API benötigt?

Ich habe zuvor nur den Dateispeicherort innerhalb des vorgeschlagenen API-Formats angegeben, wie hier zu sehen:Vorheriges Beispiel für das Posten in SendGrid mit VBA und das schien für mich und einige andere eine Weile gut zu funktionieren ... aber in letzter Zeit hat sich etwas geändert. Die Angabe eines einfachen Dateipfads scheint nicht mehr zu funktionieren. Was muss ich jetzt tun? Soll ich die Datei verschlüsseln? Wenn ja, welche Codierung soll ich base64 verwenden? Jede Hilfe dabei wäre sehr dankbar von mir und vielen anderen !!

Hier ist mein base64-Versuch, aber es gibt das gleiche Problem wie bei meinen vorherigen Dateipfadversuchen, d. H. Der Anhang wird in der E-Mail angezeigt ... aber er kann nicht geöffnet werden.

Private Sub SendEmail()
    Dim rs As DAO.Recordset
    Dim SQL As String
    Dim byteData() As Byte
    Dim xmlhttp As Object
    Dim eTo As String
    Dim eFrom As String
    Dim eBody As String
    Dim eSubject As String
    Dim eToName As String
    Dim HttpReq As String
    Dim ePass As String
    Dim eUser As String
    Dim strXML As String
    Dim strAttachments As String
    Dim strBase64 As String



    eSubject = Me.txtSubject
    eBody = Me.txtMessage
    eFrom = SenderEmail
    eUser = SendGridUser
    ePass = SendGridPass

    ' If Groups List/ Else Contacts List
    If Me.chkGroups <> 0 Then
        SQL = "SELECT * FROM qryContactsInSelectedGroups WHERE ContactType = 'Email'"
    Else
        SQL = "SELECT * FROM qrySelectedContacts WHERE ContactType = 'Email'"
    End If
    Set rs = CurrentDb.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges)

    If Not (rs.EOF And rs.BOF) Then
        rs.MoveFirst
        Do Until rs.EOF = True
            eTo = rs.Fields("ContactValue").Value
            eToName = rs.Fields("FirstName").Value & " " & rs.Fields("LastName").Value

              ' Set the Server URL to the form input
            HttpReq = "https://api.sendgrid.com/api/mail.send.xml?" _
            & "api_user=" & eUser _
            & "&api_key=" & ePass _
            & "&to=" & eTo _
            & "&toname=" & eToName _
            & "&subject=" & eSubject _
            & "&text=" & eBody _
            & "&from=" & eFrom _
            & GetAttachments()
            ' files[file1.jpg]=file1.jpg&files[file2.pdf]=file2.pdf
            Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
           ' adoStream.Position = 0
            xmlhttp.Open "POST", HttpReq, False
            xmlhttp.send

            byteData = xmlhttp.responseBody

            Set xmlhttp = Nothing
            strXML = StrConv(byteData, vbUnicode)
          ,  Call EmailResponse(strXML, rs.Fields("ContactID").Value)
            Debug.Print strXML
            rs.MoveNext
        Loop
    End If
    Set rs = Nothing
End Sub

    Private Function GetAttachments() As String
    Dim rs As DAO.Recordset
    Dim SQL As String
    Dim currentAttachment As String
    Dim strAttachments As String
    Dim Encoded64 As String

    SQL = "SELECT * FROM tblMessageAttachments WHERE [MessageID] = " & MessageID
    Set rs = CurrentDb.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges)

    If Not (rs.EOF And rs.BOF) Then
        rs.MoveFirst
        Do Until rs.EOF = True
            ' Set Current Attachment
            currentAttachment = rs.Fields("AttachmentLocation").Value & rs.Fields("AttachmentName").Value
            Encoded64 = EncodeFile(currentAttachment)
            strAttachments = strAttachments & "&files" & Chr(91) & rs.Fields("AttachmentName").Value & Chr(93) & "=" & Encoded64 'currentAttachment
            'strAttachments = strAttachments & Encoded64
           ' Debug.Print strAttachments

            rs.MoveNext
        Loop
        Debug.Print strAttachments
        GetAttachments = strAttachments
    End If

End Function

Private Function EncodeFile(text As String) As String
  Dim arrData() As Byte
  arrData = StrConv(text, vbFromUnicode)

  Dim objXML As MSXML2.DOMDocument
  Dim objNode As MSXML2.IXMLDOMElement

  Set objXML = New MSXML2.DOMDocument
  Set objNode = objXML.createElement("b64")

  objNode.DataType = "bin.base64"
  objNode.nodeTypedValue = arrData
  EncodeFile = Replace(objNode.text, vbLf, "")

  Set objNode = Nothing
  Set objXML = Nothing

End Function

Antworten auf die Frage(6)

Ihre Antwort auf die Frage