【问题标题】:send email with css style without using inline css不使用内联 css 以 css 样式发送电子邮件
【发布时间】:2015-10-09 07:17:32
【问题描述】:

我正在尝试发送一封电子邮件,其中将包含具有某种 css 样式的表格,但由于某些选择器(之后,之前),我无法使用内联 css。

有没有办法解决这个问题?

【问题讨论】:

标签: html css email


【解决方案1】:

一些电子邮件客户端会忽略电子邮件头部的<style> 标签,因此这不是一个可靠的选择。链接的 CSS 文件?更不可靠的是,像这样的样式表会被大部分电子邮件客户端忽略。

坦率地说,将样式应用于电子邮件的唯一可靠方法是使用内联 CSS。

因此,恐怕您的问题的答案是,如果不使用内联 CSS,就不可能可靠地设置电子邮件样式。

您必须想办法使用“普通”html 元素来模拟 :before 等选择器的行为。

【讨论】:

  • 感谢您的回答,我花了 2 天时间研究这个问题,我想我现在应该停下来了,呵呵。
  • 如果您在电子邮件开头的样式标签中的元素上使用选择器(例如 a:hover {background:#FFFFFF;} ,大部分电子邮件客户端(甚至是 Gmail!但不是应用程序) ) 会尊重它(除了前景等)。不是非常有用,但认为它可能是帮助您找到解决方法的一个很好的参考。
  • @Gortonington:Gmail 不会。那是一个相当大的参与者。
  • Gmail 会 - 但不是 iOS 应用程序
  • 查看链接:freshinbox.com/blog/…
【解决方案2】:

过去几年情况发生了变化。你可以做嵌入式css,做内联或事件导入外部文件。请记住哪些电子邮件提供商支持这一点:

图片来源:https://www.litmus.com/blog/do-email-marketers-and-designers-still-need-to-inline-css/

在我使用 AWS Lambda 函数(本质上是 NodeJS)时,我这样做了:

TEMPLATE.JS

const css = require('./styles');
const generateTemplate = ({ name, from, title, company, siteUrl, report }) => {
    return `
          <html>
            <head>
              <style>
               ${css.styles()}
              </style>
            </head>
                <body>
                  <h2>Message sent from email ${from} by ${name} XXXX app.</h2>
                  <p>Title: ${title}</p>
                  <p>Company: ${company}</p>
                  <p>Site Url: ${siteUrl}</p>
                </body>
            </html>
          `
}

module.exports = { generateTemplate };

STYLES.JS

const styles = () => {
    return `
      h2 {
          color: red;
      }
    `
}

module.exports = { styles };

然后,当我使用 nodemailer 等电子邮件发件人解决方案时,我只是打电话给我的generateTemplate(),在我的情况下是 AWS SES 服务

【讨论】:

    猜你喜欢
    • 2018-12-24
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2022-12-28
    • 2014-10-29
    • 2015-02-19
    • 1970-01-01
    相关资源
    最近更新 更多