Google mail 在 html 封邮件中图片的 src 路径中插入加号

Google mail insert pluses in the src path of images in html emails

我的情况:
我正在成功发送 html 封电子邮件。样式、字体和大部分图像按计划显示。

但是产品预览中的一些图像被 google 邮件代理脚本破坏了。每封电子邮件大约有 6 张图片,每张图片大小为 100x100 像素。大约 10% 损坏了 - 因为源中根本没有图像(因为 + 符号出现在地址中)。

检查代码只是帮助我猜测原因,而不是帮我完全修复它。

我在电子邮件中发送的 src:

<img src="http://www.example.com/for_email/products_images/690/690xxxxxxx.jpg">

Google 邮件在向用户显示时将其更改为:

<img src="https://ci5.googleusercontent.com/proxy/iyxxxuR-nG_Gst2xxxYN1-Qjxxx06hEE=s0-d-e1-ft#http://www.example.com/for_email/products_images/690/690xxxxxxx.jpg">

一切正常,但在 10% 中我有这些 broken links:

<img src="https://ci5.googleusercontent.com/proxy/iyxxxuR-nG_Gst2xxxYN1-Qjxxx06hEE=s0-d-e1-ft#http://www.example.com/for_e+mail/products_images/690/690xxxxxxx.jpg">
<img src="https://ci5.googleusercontent.com/proxy/iyxxxuR-nG_Gst2xxxYN1-Qjxxx06hEE=s0-d-e1-ft#http://www.example.com/for_email/products_images/690/690xxx+xxxx.jpg">
<img src="https://ci5.googleusercontent.com/proxy/iyxxxuR-nG_Gst2xxxYN1-Qjxxx06hEE=s0-d-e1-ft#http://www.example.com/for_email/products_images/690/690xxxxxxx.j+pg">

看看这些优势:

/for_e+mail/products_images/690/690xxxxxxx.jpg
/for_email/products_images/690/690xxx+xxxx.jpg
/for_email/products_images/690/690xxxxxxx.j+pg

我尝试解决的问题:

  1. 重定向。在这样的地址 /for_email/products_images/690/690xxxxxxx.j+pg 中,我只是在删除 + 后重定向到 /for_email/products_images/690/690xxxxxxx.jpg。但这不是像 /for_email/products_images/690/690xxx+xxxx.jpg 这样的错误的解决方案,因为 nginx 使用此类文件,我不会因为这么小的原因而更改它。

  2. 更少的长度。为了解决这个问题,我还更改了名称图像。以前是这样的md5 hash

    7c6a78c6ac5a6c56ac56a5c67ac5a6c57a65c67ac567a.jpg
    

    现在是

    6657435previmg.jpg
    

    它有助于将损坏的百分比 link 降低到一半,但不能完全降低。

我很久以前就有这个问题了:大约半年,偶尔有空闲时间尝试解决它。谷歌搜索仍然没有帮助我,我希望你这样做。

我在 1C-Bitrix 上通过 PHP 发送,但我认为这不重要(但不完全确定)。

您查看过您的邮件服务器发出的经过编码的邮件吗?

换句话说,GMail 实际收到的是什么?只需使用完全相同的方法将相同的邮件发送到您自己的邮箱之一,并使用一种工具来检查完整的邮件来源。

我之所以这样说是因为 GMail 通常会在 URL 中有 space 时插入 plus-signs。

你必须绝对确定这不是你插入它们的终点。在这种情况下,仅查看您打算发送的内容是不够的。

我只能猜测为什么 spaces 会出现在您的输出中。这完全取决于您发送电子邮件的方式。一般是转换或者encoding/decoding.

引起的

感谢 @KIKO Software 和他的回答,我找到了问题所在!

Table 个产品已添加到 一个长 HTML 字符串 中。

我的 电子邮件服务器在发送前用 \n 符号拆分了这个字符串。这种拆分可以在任何地方:在任何单词的中间(单词会被打断);任何样式(样式已损坏);甚至是 src 图片(损坏的图片)的 url。

解决方案很简单:我只需要在这个table的产品中到处加上"\n\r"现在一切都很好。