Почтовый камень - как очистить строку тела

Я пытаюсь прочитать письмо с помощью рубиновой почты. Но mail.body.decoded возвращает мне не только тело сообщения. Как я могу очистить это тело сообщения и удалить нежелательный текст, как:

-20cf30433c9a437cc304939017ef\nContent-Type: text/plain; charset=ISO-8859-1\nContent-

message = $stdin.read
mail = Mail.read_from_string(message)
puts mail.body.decoded

--20cf30433c9a437cc304939017ef\nContent-Type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n REAL BODY TEXT \\n\n--20cf30433c9a437cc304939017ef\nContent-Type: text/html; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n<br clear=3D\"all\">--20cf30433c9a437cc304939017ef--

Как я могу очистить это почтовое сообщение, извлекая только РЕАЛЬНЫЙ ТЕКСТ ТЕЛА без ЛЮБОГО заголовка?

Я создаю простую систему тикетов, основанную на Ruby on Rails, и тикет создается при получении электронного письма по адресу ticket@mydomain.com. Но когда сообщение находится в формате HTML, ТЕКСТ ТЕЛА окружен текстом заголовков.

4 ответа

Решение

Если у вас есть правильно отформатированный адрес электронной почты, вы можете использовать вспомогательные методы Mail:

mail = Mail.new(email_string)
mail.text_part # finds the first text/plain part
mail.html_part # finds the first text/html part

Это не всегда работает, например, если у вас есть отдельные сообщения (только текст) или вы получаете электронную почту из Интернета в целом, поскольку вы не можете полагаться на форматирование от каждого клиента. Поверьте мне, я выучил трудный путь.

Похоже, что вы получили многочастную электронную почту, поэтому вы можете использовать mail.parts[0].body.decoded Они, вероятно, тоже пригодятся: mail.multipart?
mail.parts.length

Документация gem на github довольно приличная

С mail драгоценный камень, вы можете сделать:

text = mail.multipart? ? mail.text_part.decoded : mail.body.decoded`

Добавьте почтовый гем и просто используйте формат тела письма с mail.parts[1].body.decoded.

Другие вопросы по тегам