如何在 ruby​​ 中从 net//smtp 发送电子邮件中的 HTML 内容?

Posted

技术标签:

【中文标题】如何在 ruby​​ 中从 net//smtp 发送电子邮件中的 HTML 内容?【英文标题】:How to send HTML content in email from net//smtp in ruby? 【发布时间】:2013-08-01 14:00:26 【问题描述】:

相关代码:

msg = "Subject: Reset password instructions\n\nHello " + @request_payload["email"] + "!\n\n" +
      "A new account has been created for you at <a href=\"presentation-layer.dev\">presentation-layer.dev<a>." + 
      "Please go to that page and click \"forgot password\" to set your password."
      smtp = Net::SMTP.new 'smtp.gmail.com', 587
      smtp.enable_starttls
      smtp.start('domain', "email", 'password', :login) do
        smtp.send_message(msg, 'sender', "recip")
      end

生成的电子邮件中只有原始文本。如何让服务器评估 html 标签?

【问题讨论】:

服务器(邮件传输代理 == MTA)不评估 HTML 标记。邮件用户代理 (MUA) 在向用户显示内容时会执行此操作。 【参考方案1】:

听起来您需要设置“Content-Type”标头:

Content-Type: text/html;

【讨论】:

【参考方案2】:

要做你想做的事,你应该生成一个 MIME 文档。如果您真的想把它做好,请创建一个多部分 MIME 文档,这样您就有了 TEXT 和富文本部分。

您可以从 Net::SMTP 执行此操作,但您必须在文档中添加必要的 MIME 标头和部分分隔符。有关如何操作的示例,请参见“Sending Email using Ruby - SMTP”。

使用Mail gem 更容易,它支持两者,尤其是当您包含多个部分或添加附件时。来自文档:

您还可以创建 MIME 电子邮件。有一些辅助方法可以为 text/plain 和 text/html(最常见的一对)制作多部分/替代电子邮件,您可以手动创建任何其他类型的 MIME 电子邮件。

在“Writing and sending a multipart/alternative (html and text) email”的文档中更下方:

Mail 做了一些基本的假设,并使做普通的事情尽可能简单......(从邮件库中询问很多)

mail = Mail.deliver do
  to      'nicolas@test.lindsaar.net.au'
  from    'Mikel Lindsaar <mikel@test.lindsaar.net.au>'
  subject 'First multipart email sent with Mail'

  text_part do
      body 'This is plain text'
  end

  html_part do
      content_type 'text/html; charset=UTF-8'
      body '<h1>This is HTML</h1>'
  end
end

【讨论】:

感谢您的帮助。如何配置此代码以使用 google smtp 服务器而不是本地运行的服务器?我注意到它说你可以通过 sendmail 发送 - 我应该只做Net::SMTP.start(server info here)吗? 在这里查看答案 ***.com/questions/12884711/… 它给了我从 gmail 帐户发送电子邮件所需的代码

以上是关于如何在 ruby​​ 中从 net//smtp 发送电子邮件中的 HTML 内容?的主要内容,如果未能解决你的问题,请参考以下文章

在Ruby中从末尾切片字符串

Ruby 发送邮件 - SMATP

雷林鹏分享:Ruby 发送邮件 - SMATP

在 Ruby 中从多维数组创建排列

在 Ruby 中从多维数组创建排列

在 Ruby 中从 XML DTD 生成对象模型