Получите электронное письмо с Actionmailer и прочитайте обычный текст - PullRequest
2 голосов
/ 15 ноября 2010

Я использую IMAP для получения некоторых электронных писем из gmail, а затем анализирую их с помощью нового метода получения ActionMailer в Rails 3.

raw_email   = imap.uid_fetch(uid, ['RFC822']).first.attr['RFC822']
email = UserMailer.receive(raw_email)

Теперь электронная почта теперь является классом Mail :: Message и в :,: fromи: тема работает отлично.Однако я не могу понять, как получить простой текст из тела.До Rails 3 я мог использовать плагин tmail_body_extractors для получения простого тела.

Как бы вы сделали это с Rails 3?

Jakobinsky: email.body.raw_source немного ближе, но он все еще дает мне много мусора.

"--001636310325efcc88049508323d \ r \ nContent-Type: text / plain; charset = ISO-8859-1 \ r \ nContent-Transfer-Encoding: quoted-printable \ r \ n \ r \ nЭто некоторое содержание тела \ r \ n\ r \ n - = 20 \ r \ nВенлиг Хильсен \ r \ nAsbj = F8rn Морелл \ r \ n \ r \ n - 001636310325efcc88049508323d \ r \ nКонтент-тип: text / html; charset = ISO-8859-1 \Кодировка передачи содержимого: цитируемая для печати почта \ r \ n \ r \ naf
-
Венлиг Хильсен
Asbj = F8rn Морелл
\ r \ n \ r \ n--001636310325efcc88049508323d - "

Должен ли я бросить своих собственных помощников для очистки raw_source или уже есть метод, гем или помощник для этого?

Ответы [ 3 ]

5 голосов
/ 20 июня 2011

Смотрите ответ на этот вопрос: Rails - почта, получая тело в виде простого текста

Короче говоря, решение:

plain_part = message.multipart? ? (message.text_part ? message.text_part.body.decoded : nil) : message.body.decoded

Но я рекомендую прочитать полный ответ, так как он очень хороший и всеобъемлющий.

1 голос
/ 21 января 2011

Вы можете извлечь простое тело из body.parts.Тем не менее, в теле остались некоторые заголовки:

if body.multipart?
  body.parts.each do |p|
    if p.mime_type == "text/plain"
      body = p.body
    end
  end
end
body.to_s
0 голосов
/ 15 ноября 2010

Вы должны быть в состоянии получить тело так же просто, как email.body.raw_source. Я сам не проверял, но вы можете посмотреть исходный код ActionMailer :: Message # body .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...