【问题标题】:Send an HTML email using the Gmail API使用 Gmail API 发送 HTML 电子邮件
【发布时间】:2015-01-02 09:32:43
【问题描述】:

由于某种原因,Gmail API 不会发送 html 电子邮件。发送明文工作正常:

var message = 'From: Me <me@gmail.com>\r\n' +
    'To: Me <me@gmail.com>\r\n' +
    'Subject: Hello\r\n\r\n'
    'World'

var raw = btoa(message)

然后当我尝试 html 时,它只是显示为一条空消息:

var message = 'From: Me <me@gmail.com>\r\n' +
    'To: Me <me@gmail.com>\r\n' +
    'Subject: Hello\r\n'
    'Content-Type: text/html; charset=utf-8\r\n' +
    'Content-Transfer-Encoding: quoted-printable\r\n\r\n' +
    '<html><body>' +
    '<h1>World</h1>' +
    '</body></html>'

var raw = btoa(message)

有什么想法吗?可能是因为它不符合 RFC 2822?

【问题讨论】:

  • 如何使用 JavaScript 发送邮件?
  • 我正在使用 javascript 向 Gmail API 发送一个发布请求,其中原始变量是请求中的参数。抱歉,我意识到我并没有在问题中提供任何上下文。
  • 你如何在上面的例子中创建 rfc2822 字符串,消息变量。我坐着硬编码还是有其他方法吗? @rob
  • @robs,内联样式是否适合您?
  • 我可以看看你的完整代码吗?我现在也有同样的问题!

标签: javascript gmail-api


【解决方案1】:

对于初学者,您需要使用 base64url 编码,使用 web/url 安全字母表,而不仅仅是标准 btoa() base64。如果这不能解决它,您可以发布您的代码和您收到的确切错误消息吗? (或者它是否有效并且不显示为 html?)

【讨论】:

  • 嗯我试过'encodeURI(btoa(message))'但是当有'+'字符时我得到一个400,所以我认为它应该是标准的base64。实际发送 html 电子邮件没有错误,只是生成的邮件正文为空。
  • 不是 encodeURI() 也不是。你想要 base64url() 类似于 btoa() 但它不使用“/”和“+”。如果没有发生任何事情被编码为“/”或“+”,btoa() 可能会正常工作。 :) 如果 javascript 中没有 base64url,只需 btoa() 然后 .replace("/", "_").replace("+", "-")。你可以包含整个响应(HTTP 标头 + 正文)吗?肯定有尸体。
  • 正确, btoa(message).replace('/', '_').replace('+', '-') 完美。谢谢楼主!
  • 糟糕,不是很完美,要记得全局应用它:btoa(message).replace(/\//g, '_').replace(/\+/g, '-')
  • 如果您发送正文为中文的电子邮件,这是正确的方法: btoa(unescape(encodeURIComponent(mail))).replace(/\//g, '_').replace(/ \+/g, '-');中文主题:“=?UTF-8?B?” + btoa(unescape(encodeURIComponent(subject))) + "?="
猜你喜欢
  • 2018-01-26
  • 1970-01-01
  • 2021-09-11
  • 2012-11-25
  • 2017-04-14
  • 2019-10-16
  • 2017-01-25
  • 2014-10-30
  • 2017-03-07
相关资源
最近更新 更多