HTML 图像未显示在通过 VBA 中的 Gmail API 发送的 MIME 消息中,使用 3D

Posted

技术标签:

【中文标题】HTML 图像未显示在通过 VBA 中的 Gmail API 发送的 MIME 消息中,使用 3D【英文标题】:HTML image not showing up in MIME message sent via Gmail API in VBA, Used 3D 【发布时间】:2015-08-27 20:56:13 【问题描述】:

我正在通过 VBA 中的 Gmail REST API 发送 html 电子邮件,但 HTML 图像未显示在已发送的邮件中。我添加了一个 img 标题标签,我尝试了一个已批准的“ci3.googleusercontent.com”版本的图像作为源,尝试了 png 和 jpg。由于我在 POST 请求的正文中发送电子邮件信息,我认为我不需要使用 Base64。没有任何空格,因此不必担心 %20 和转换为 +。

还有其他想法吗?

Sub SendGmail()
    Dim result As String, myURL As String, postData As String
    Dim winHttpReq As Object
    Dim x As Integer

    Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

    myURL = "https://www.googleapis.com/upload/gmail/v1/users/me/messages/send"
    postData = "From: 'Michael F' <mf@example.com>" & vbCr & _
            "Subject: Test Message " & Now() & vbCr & _
            "Reply-To: support@example.com" & vbCr & _
            "To: JoeTest@gmail.com" & vbCr & _
            "Content-Type: text/html; charset=utf-8" & vbCr & _
            "Content-Transfer-Encoding: quoted-printable" & vbCr & vbCr & _
            "<b>Test Message</b><p>" & vbCr & vbCr & _
            "<img alt='ExampleLogo' " & _
            "title='ExampleLogo' src='http://www.example.com/LogoSignature.png'>"

            '*Putting 3D right after src= solved the problem!*

    winHttpReq.Open "POST", myURL, False
        winHttpReq.SetRequestHeader "Host", "www.googleapis.com"
        winHttpReq.SetRequestHeader "Content-Length", Len(postData)
        winHttpReq.SetRequestHeader "Content-Type", "message/rfc822"
        winHttpReq.SetRequestHeader "Authorization", "Bearer <mycode>"
        winHttpReq.Send (postData)
        Set winHttpReq = Nothing   
End Sub

这是收到的电子邮件 HTML 源代码的摘录。我的已发送文件夹中的已发送电子邮件也没有显示图像,但 HTML 在那里,这也很奇怪......

MIME-Version: 1.0
X-Received: by 10.50.30.9 with SMTP id o9mr838664igh.36.1434063589114; Thu, 11
 Jun 2015 15:59:49 -0700 (PDT)
Received: from 4.apps.googleusercontent.com named unknown by
 gmailapi.google.com with HTTPREST; Thu, 11 Jun 2015 18:59:48 -0400
From: "'Michael F'" <mf@example.com>
Reply-To: support@example.com
Date: Thu, 11 Jun 2015 18:59:48 -0400
Message-ID: <CAKUypCw@mail.gmail.com>
Subject: Test Message 6/11/2015 17:59:51
To: JoeTest@gmail.com
Content-Type: multipart/alternative; boundary=047d7bd76aead100b6051845f2ef

--047d7
Content-Type: text/plain; charset=UTF-8

*Test Message*

--047d7
Content-Type: text/html; charset=UTF-8

<b>Test Message</b><p>

<img></p>

--047d7--

【问题讨论】:

【参考方案1】:

我找到了解决方案,但希望有人能解释发生了什么。我在从 Gmail REST 发送的电子邮件中显示 HTML 图像时遇到问题。但是,我发现如果我将“3D”放在图像源的前面,即&lt;img src=3D'http://www.example.com/logo.png'&gt;,图像将显示在电子邮件中。一些搜索显示 3D 与引用指向有关,但我不明白。 3D的目的是什么?使用有什么危险吗?

找到这个old SO thread 解释:

【讨论】:

以上是关于HTML 图像未显示在通过 VBA 中的 Gmail API 发送的 MIME 消息中,使用 3D的主要内容,如果未能解决你的问题,请参考以下文章

Excel 未通过 VBA 显示打开的 Excel 文档

通过 VBA 访问 Excel 表中的图像

对于从 java 程序发送的电子邮件,html 内容中的 png 图像未显示在 gmail 客户端上

Excel 2016 VBA - 状态栏未显示完整消息

通过参数解析器加载数据时,图像未显示在列表中

图像未显示在 Firefox Developer 中的 Firebase 管理员的通知中