2012-02-09 4 views
3

Я пытаюсь создать нормальное сообщение Smtp в Ruby:Форматирование сообщений SMTP полей заголовка в Рубине

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

    from = '[email protected]' 
    p = hmhmm 

    msgstr = <<-END_OF_MESSAGE 
    From: User <[email protected]> 
    To: Jensa <[email protected]> 
    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 <[email protected]> To: Jensa Subject: Titel Hej PÅ dig. Inte under.<[email protected]> 
Date: 9 February 2012 14.36.03 CET 

В теле сообщения ничего нет.

Когда я добавить «\ п» после того, как «Titel», то весь текст после помещается в сообщении, как оно должно:

From: User <[email protected]> To: Jensa Subject: Titel <[email protected]> 
Date: 9 februari 2012 14.36.03 CET 

     Hej PÅ dig. Inte under. 

Но все-таки «TO» адрес не виден, и это все в поле FROM.

В чем проблема?

+0

Является ли ваш объект «объектом» массив? –

+1

FWIW, я нахожу [Pony] (http://rubydoc.info/gems/pony/1.4/frames) исключительно удобным способом отправки электронной почты в Ruby. – Phrogz

ответ

2

Вы должны использовать CRLF для разделения каждой строки.

Я думаю, что ваши линии в настоящее время разделены только «\ r» или «\ n» - не оба. Попытка:

msgstr = [ 
    "From: User <[email protected]>", 
    "To: Jensa <[email protected]>", 
    "Subject: Titel", 
    "", 
    "Hej PÅ dig. Inte under." # <- swedish ;) 
].join("\r\n") 
+2

Да, это сработало: От: Пользователь <[email protected]> \ r \ nДля: Jensa <[email protected]> \ r \ nSubject: Titel \ n Почему я должен явно писать эти символы? Я не видел примеров, где они работают. Обычно они делают то же самое, что и я, просто вступая в игру. – JonatanEkstedt

+0

RFC2822 гласит: «Линия представляет собой последовательность символов, которая ограничена двумя символами возврата каретки и линейной подачей»; - Основная причина этого - предотвратить двусмысленность. Большинство операционных систем используют CR или LF для разграничения строк. Некоторые используют CR, некоторые используют LF, а некоторые используют оба вместе для разделения строки. Использование обоих в электронных письмах упрощает для программы интерпретацию новой строки во всех этих операционных системах. См. Http://en.wikipedia.org/wiki/Newline – SimonMayer

Смежные вопросы