如何使用mail gem设置发送HTML电子邮件?

5

我正在使用Mail gem发送电子邮件。这是我的代码:

require 'mail'
require 'net/smtp'

Mail.defaults do

delivery_method :smtp, { :address              => "smtp.arrakis.es",
                       :port                 => 587,
                       :domain               => 'webmail.arrakis.com',
                       :user_name            => 'myname@domain.com',
                       :password             => 'pass',
                       :authentication       => 'plain',
                       :enable_starttls_auto => true  }

end

Mail::ContentTypeField.new("text/html") #this doesnt work

msgstr= File.read('text2.txt')

list.each do |entity|
    begin
        Mail.deliver do
            from    'myname@domain.com'
            to      "#{entity}"
            subject 'a good subject'
            body   msgstr
        end
    rescue => e
    end

end
end

我不知道如何设置内容类型,以便我可以像我的电子邮件客户端一样将我的电子邮件格式化为html。虽然实际上我只希望能够定义粗体文本,就像我的电子邮件客户端所做的那样:粗体文本。有没有人知道我需要指定哪种内容类型才能实现这一点,以及如何在邮件中实现它?

请注意,上面的代码适用于发送纯文本电子邮件。


哇,我想说粗体文本,但它变成了斜体文本,所以这里需要两个星号而不是一个... - fartagaintuxedo
2个回答

13

文档中可知:

编写并发送多部分/备用(html和文本)电子邮件

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

非常感谢!我正在阅读文档,但无法找到这个...我想我没有想到会在示例中找到它。 - fartagaintuxedo
text_part do 然后 content_type("text/plain; charset=ISO-8859-1; format=flowed") 这样可以在两个星号之间编写粗体文本。 - fartagaintuxedo
翻译:糟糕,它并没有起作用。我的Thunderbird显示为粗体但同时也显示星号,很奇怪,在其他邮件客户端中根本没有任何反应...你知道我应该如何指定内容类型以允许基本格式(星号)粗体文本(星号),而不必涉及HTML吗? - fartagaintuxedo
你做不到。这方面没有标准,流式格式是Mozilla的扩展,不被所有客户端广泛支持。唯一的方法是使用HTML。 - Simone Carletti

4

@Simone Carletti的回答基本上是正确的,但我在这方面遇到了困难,不想在我的电子邮件中有纯文本部分和单独的HTML部分。如果您只想要整个电子邮件为HTML格式,可以使用以下内容:

mail = Mail.deliver do
  to      'nicolas@test.lindsaar.net.au'
  from    'Mikel Lindsaar <mikel@test.lindsaar.net.au>'
  subject 'First email sent with Mail'
  content_type 'text/html; charset=UTF-8'
  body '<h1>This is HTML</h1>'
end

我可能错过了,但我在Mail gem文档中没有看到如何执行此操作的描述,我认为这比制作多部分消息更常见。该文档似乎只涵盖了普通文本消息和多部分消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接