【问题标题】:Dynamic image height and width in html emails in OutlookOutlook 中 html 电子邮件中的动态图像高度和宽度
【发布时间】:2019-05-29 15:02:37
【问题描述】:

我正在发送一封 HTML 电子邮件,其中包含由 React.js 生成的内容。在电子邮件的正文中,我必须将客户的图标放在一个 40x40 的单元格中。

有些客户的图标是方形的,看起来不错。其他的或高或宽,Outlook 会扭曲它们以适应 40x40 单元格,这并不酷。

以下是我尝试过的一些方法,以及 Outlook 如何破坏它们:

  1. 以完整尺寸显示图像(最大高度和最大宽度不起作用):
<table border="0" cellPadding="0" cellSpacing="0" width="40" height="40">
  <tbody>
    <tr>
      <td align="center">
        <img
          alt=""
          border="0"
          src={iconUrl}
          width="auto"
          height="auto"
          style={{ display: "block", maxHeight: "40px", maxWidth: "40px" }}
        />
      </td>
    </tr>
  </tbody>
</table>
  1. 扭曲图像使其成为 40x40 正方形:
<table border="0" cellPadding="0" cellSpacing="0" width="40" height="40">
  <tbody>
    <tr>
      <td align="center">
        <img
          alt=""
          border="0"
          src={iconUrl}
          width="40"
          height="40"
          style={{ display: "block", width: "auto", height: "auto", maxHeight: "40px", maxWidth: "40px" }}
        />
      </td>
    </tr>
  </tbody>
</table>
  1. 以全尺寸显示图像:
<table border="0" cellPadding="0" cellSpacing="0" width="40" height="40">
  <tbody>
    <tr>
      <td align="center">
        <img
          alt=""
          border="0"
          src={iconUrl}
          style={{ display: "block", maxHeight: "40px", maxWidth: "40px" }}
        />
      </td>
    </tr>
  </tbody>
</table>
  1. Outlook 不支持任何background 样式属性,因此不会出现任何内容
<table border="0" cellPadding="0" cellSpacing="0" width="40" height="40">
  <tbody>
    <tr>
      <td align="center">
        <div
          style={{
            display: "block",
            height: "40px",
            width: "40px",
            backgroundImage: `url(${iconUrl})`,
            backgroundSize: "cover",
            backgroundRepeat: "no-repeat",
            backgroundPosition: "center center",
          }}
        />
      </td>
    </tr>
  </tbody>
</table>
  1. 以全尺寸显示图像:
<table border="0" cellPadding="0" cellSpacing="0" width="40" height="40">
  <tbody>
    <tr>
      <td align="center">
        <img
          alt=""
          border="0"
          src={iconUrl}
          style={{ display: "block", maxWidth: "40px", maxHeight: "40px", objectFit: "cover" }}
        />
      </td>
    </tr>
  </tbody>
</table>

有什么建议吗?谢谢。

【问题讨论】:

    标签: reactjs outlook html-email


    【解决方案1】:

    您的 40 像素高度声明会扭曲徽标。此外,Outlook 无法识别最大宽度/高度,因此这是多余的。 理想情况下,您将删除高度并允许 Outlook 按比例缩放图像。

    但 Outlook 也将始终以其真实宽度显示图像。这在使用 Retina 优化图像编码电子邮件时尤其明显。
    假设您有一个 600 像素/全宽的横幅,您会将图像保存为 1200 像素以供 Retina 使用,并在代码中将宽度声明为 600 像素。 那么 Outlook 将显示 1200px 版本。恼人的!
    一种解决方法是设置缩放版本的高度。这就是你目前遇到的问题,没有尝试。

    最好的办法是:

    1. 完全删除高度声明。
    2. 自行调整图像大小,最小为 40 像素宽。这样一来,WxH 比率是正确的。

    显然,这是一个完美的世界,我知道您可能无法胜任,可能工作量很大,或者您可能有很多客户进来,这让这很乏味。 所以只是一个建议。

    【讨论】:

    • 感谢您深入了解 Outlook 的行为。我正在考虑两种方法来解决这个问题:1)将图像的实际尺寸传递给我的 React 组件(这样我就可以缩小它们并包括“高度”和“宽度”),2)动态创建一个新的徽标图像仅用于电子邮件,最大 40 宽和 40 高。
    • 请发布您的代码,以便我们看到它的实际效果。你说的不正确。您可以通过发布宽度来控制 Outlook 图像宽度,然后使用该样式为其他电子邮件客户端设置宽度。
    • 我不知道宽度(或高度)。每个客户都会有所不同。
    • @gwally, 1) 您希望我准确地发布哪一部分的代码?我在这里提到了一些技巧。 2) 哪一部分不正确?我没有说过不能在 Outlook 中控制宽度。
    • @AlanP。完全理解不知道图像高度的意义。您上面提到的两种方法正是您所需要的。要么明确定义按比例缩小的宽度(以避免 Outlook 以真实尺寸呈现您的图像),要么为电子邮件动态创建一组新图像。就个人而言,我会选择 #2,但在 React 方面我是一个外行,我不知道实现这一点的背后是什么。祝你好运!
    【解决方案2】:

    Outlook 将忽略在内联样式中设置的图像宽度。由于您的图标应该是 40px,因此将宽度声明为 &lt;img width="40" /&gt;

    <table role="presentation" cellspacing="0" cellpadding="0" border="0" width="40">
      <tr>
        <td style="text-align: center">
          <img src="https://via.placeholder.com/40" width="40" height="40" alt="" border="0"  style="height: auto; max-width: 40px;">
        </td>
      </tr>
    </table>
    

    此外,Outlook 仅使用 VML 处理背景图像。

    最后,Outlook 和其他电子邮件客户端将忽略格式不正确的 HTML 和 CSS。我建议复习一下分隔 css 值; 的正确方法。您会减少头痛。

    祝你好运。

    【讨论】:

    • 感谢您抽出宝贵时间回答。徽标可能是 100x20,在这种情况下,我希望它显示为 40x8。或者徽标可能是 20x100,在这种情况下,我希望它显示为 8x40。您的解决方案始终将其显示为 40x40 正方形,这是不正确的。用逗号代替分号的 css 也是因为它是 React。
    • gwally 制作的内联样式宽度点完全不正确。我个人更喜欢使用样式宽度而不是内联属性声明,并且从来没有遇到过问题。除非涉及到 Outlook 的 120% DPI 视图,否则我将两者都包括在内。
    • @AlanP。您可以使用内联样式为每个理解它的电子邮件客户端动态设置宽度。对于 Outlook 2007-2019,您需要设置图像的宽度。试试看,你就会明白的。
    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 2019-05-30
    • 2018-01-13
    • 2013-08-20
    • 2014-04-03
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多