在Ruby中格式化smtp消息头字段

时间:2012-02-09 13:56:23

标签: ruby smtp

我正在尝试在Ruby中创建一个正常的smtp消息:

def send_email(msg, to)
    require 'net/smtp'
    require 'tlsmail'

    from = 'user@gmail.com'
    p = hmhmm

    msgstr = <<-END_OF_MESSAGE
    From: User <user@gmail.com>
    To: Jensa <jensa11.11.1@gmail.com>
    Subject: Titel

    Hej PÅ dig. Inte under.   # <- swedish ;)
    END_OF_MESSAGE

    Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)

    Net::SMTP.start('smtp.gmail.com', 587, 'gmail.com', from, p, :login) do |smtp|
        smtp.send_message msgstr, from, to
    end
    puts "message sent"
end

发送消息,但除“TO”地址之外的所有数据都在消息的“FROM”字段中结束,如下所示:

FROM: User <user@gmail.com> To: Jensa Subject: Titel Hej PÅ dig. Inte under.<user@gmail.com>
Date: 9 February 2012 14.36.03 CET

邮件正文中没有任何内容。

当我在“Titel”之后添加'\ n'时,之后的所有文本都会按照它应该放在消息中:

From:   User <user@gmail.com> To: Jensa Subject: Titel <user@gmail.com>
Date:   9 februari 2012 14.36.03 CET

      Hej PÅ dig. Inte under.

但是“TO”地址仍然不可见,而且全部都在FROM字段中。

有什么问题?

1 个答案:

答案 0 :(得分:2)

你必须使用CRLF来分隔每一行。

我猜你的线目前只是被“\ r”或“\ n”分开 - 而不是两者。尝试:

msgstr = [
  "From: User <user@gmail.com>",
  "To: Jensa <jensa11.11.1@gmail.com>",
  "Subject: Titel",
  "",
  "Hej PÅ dig. Inte under."   # <- swedish ;)
].join("\r\n")