Mail gem - как очистить строку тела
Я пытаюсь прочитать письмо с использованием рубиновой почты.
Но 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--
Как я могу очистить это почтовое сообщение по электронной почте, извлекая только текст REAL BODY TEXT, без ЛЮБОГО заголовка?
Я создаю простую систему билетов, базируемую в Ruby on Rails, и билет создается, когда электронное письмо получено по адресу [email protected] Но когда сообщение находится в формате HTML, ТЕКСТ BODY окружен текстом HEADER.
Ответы
Ответ 1
Если у вас есть правильно отформатированное электронное письмо, вы можете использовать методы почтового помощника:
mail = Mail.new(email_string)
mail.text_part # finds the first text/plain part
mail.html_part # finds the first text/html part
Это не всегда работает, если у вас есть, например, сообщения с одной частью (только текст) или получать электронную почту из Интернета в целом, поскольку вы не можете полагаться на форматирование от каждого клиента. Поверь мне, я усвоил трудный путь.
Ответ 2
похоже, что у вас есть многопользовательская электронная почта, поэтому вы можете использовать mail.parts [0].body.decoded
Они, вероятно, тоже пригодится: mail.multipart?
mail.parts.length
Документация о драгоценных камнях в github довольно приличная
Ответ 3
Добавьте почтовый ящик и просто используйте формат тела электронной почты с mail.parts [1].body.decoded.
Ответ 4
С драгоценным камнем mail
вы можете сделать:
text = mail.multipart? ? mail.text_part.decoded : mail.body.decoded`