Ruby Mail gem извлекает заголовки и очищает тело - PullRequest
1 голос
/ 02 апреля 2012

Я работаю с Ruby Mail gem , чтобы попытаться прочитать и разобрать электронные письма. У меня такая же проблема, как в этом посте , но предоставленные решения решили только половину моих проблем ...

Есть некоторые сообщения электронной почты, которые не отвечают на html_part или text_part, но они все еще считаются "составными". Это нормально, я прибегну к ручному просмотру типов MIME. Однако есть составные сообщения, которые не имеют частей!

У меня есть сообщение, что message.multipart? #=> true, но message.parts.length #=> 0. Поэтому я не могу извлечь одну часть: (.

Если я посмотрю на message.body (или message.body.decoded), там будет текст IS, а тип - text/html. Тем не менее, он также имеет всю информацию заголовка вверху.

Звучит безумно, но как я могу получить только тело (или только заголовки) этого "составного" электронного письма, которое не имеет частей?

Редактировать

Вот одно из рассматриваемых сообщений:

#<Mail::Message:70280791538440, Multipart: true, Headers: ...>

С message.body:

--XX-2ba4f992ec6d5e224ebeaf78eac50df5\nContent-type: text/html; charset=\"UTF-8\" \nContent-Transfer-Encoding: 7bit \n\nThank you...

1 Ответ

3 голосов
/ 03 апреля 2012

Да, это потому, что в реальной электронной почте есть много неожиданностей, которые не соответствуют протоколу.

Чтобы получить часть заголовка и часть тела:

header_part, body_part = message.body.split(/\n\s*\n/m, 2)

В этом файле вы можете найти несколько полезных шаблонов для разбора:

lib/mail/patterns.rb
...