【问题标题】:SVG images blocked by gmail proxy被 gmail 代理阻止的 SVG 图像
【发布时间】:2014-01-15 22:13:54
【问题描述】:

似乎新的 gmail 图像代理不适用于 SVG(如果您在新选项卡中打开代理 url,则会出现 404 错误。)

我找不到任何有关支持/阻止的文件类型的文档。 gmail 中的 SVG 是否适用于其他人?

我能想到的唯一解决方法是使用 PhantomJS 在服务器上生成 svg 的 png - 还有其他选项吗?

背景:

这适用于发送每日摘要电子邮件的 web 应用程序,显示过去 24 小时的图表(因此 svg 每天都不同,将它放在电子邮件中可以为用户省去点击进入应用程序的麻烦。)

我知道 SVG 图像在某些电子邮件客户端中无法使用,但 95% 可以使用,其余的仍然可以点击进入 web 应用程序。

在本月初代理更改之前,它在 gmail 中运行良好(本月底才刚刚推出到 Google Apps 帐户。)

【问题讨论】:

    标签: svg proxy gmail phantomjs


    【解决方案1】:

    我收到了 Google 支持的回复,他们确认目前没有计划在代理中支持 SVG 图像。他们说,他们只占 100,000 封电子邮件图像中的 1 个。

    除了 PhantomJs,更简单的 svg 的一个选项是 php 插件 ImageMagick。

    这里有一些示例代码可以帮助您入门:

    header("Content-Type: image/png");
    header("Content-Disposition: inline;");
    if (empty($svg)) {
        readfile("invisibleImage.png", true);
    } else {
    
        //TODO: You'll probably want to set headers to cache the returned image
    
        $filepath = "/path/to/where/images/are/cached/";
    
        if (!file_exists("$filepath$svgName.png")) {
            if (!is_dir($filepath)) {
                mkdir($filepath, 0700, 1);
            }
            file_put_contents("$filepath$svgName.svg", $svg);
            $cmd = "rsvg-convert $filepath$msk.svg > $filepath$svgName.png";
            exec($cmd);
            unlink("$filepath$svgName.svg");
        }
        readfile("$filepath$svgName.png");
    }
    

    您至少需要安装以下一些:

    apt-get install librsvg2-bin libpng3 imagemagick libpng12-dev \
    

    【讨论】:

    • 多么厚颜无耻的逻辑! - 这只是 100,000 人中的 1 人,因为没有人愿意发送不受支持的东西 ;) 也许这应该更响亮地听到……?你能分享一个联系谷歌支持的方法吗(只问有多种方法,我尝试了几个 - 没有得到任何回应)。
    • 我通过企业支持收到了我的 Google Apps for Work 帐户的回复。如果您有帐户并且感兴趣,那么每个询问的人都会帮助给予它更高的优先级......但老实说,我仍然不会抱有很大希望。一年过去了,ImageMagick 选项对我们来说效果很好——我们的需求并不太复杂。我在答案中添加了一些示例代码。
    • 另外,为了公平起见,即使 Google 确实支持 svg - 大多数电子邮件客户端也不支持。所以需求可能会保持低位。