Forum: Ruby IMAP stuff (or POP)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
07972f938f50bfff593955ae5b7aa8ae?d=identicon&s=25 Phil Cooperking (basic)
on 2007-01-18 21:52
I've been trying to find a good source of imap or pop information with
ruby and cant. maybe I'm missing somthing.

as I understand with imap you can select parts of the BODY like [TEXT]
[1]. I understand what text does but I was underthe impression that [1]
would select just the plain text. with that does'nt always seem to be
the case with my test program. most of the results will come in plain
text then some will contain a both multiparts. So does [1] actually
do(mean).

What I'm trying to do is strip everything from the mail apart from the
Enevelope and the plain text. can somebody point me in the right
direction? this is the line of code that I've been using to pull the
email with

mail.message = imap.fetch(message_id, 'BODY[1]')[0].attr['BODY[1]']

thanks
7b56484f1e9d9af7b4c2c7ef16142197?d=identicon&s=25 Martin Boese (Guest)
on 2007-01-19 16:30
(Received via mailing list)
If it is an option for you, try downloading the entire mail and use
tmail or
rubymail to parse/split it. Maybe the problem is with your imap server.

http://www.lickey.com/rubymail/
http://i.loveruby.net/en/projects/tmail/

Martin
58479f76374a3ba3c69b9804163f39f4?d=identicon&s=25 Eric Hodel (Guest)
on 2007-01-20 22:48
(Received via mailing list)
On Jan 18, 2007, at 12:52, Phil Cooperking wrote:

>
> What I'm trying to do is strip everything from the mail apart from the
> Enevelope and the plain text. can somebody point me in the right
> direction? this is the line of code that I've been using to pull the
> email with
>
> mail.message = imap.fetch(message_id, 'BODY[1]')[0].attr['BODY[1]']

I think that BODY[1] means grab the first section of the message
body.  You'll need to figure out which section is text/plain first,
then grab that section.

I think something like:

header = imap.fetch 397, 'RFC822.HEADER'
header.first.attr['RFC822.HEADER'] =~ /^Content-Type: .*$/
$&
# => "Content-Type: multipart/alternative; \r"

Since this is a multipart message, then figure out which chunk is what:

imap.fetch 397, 'BODY[1.MIME]'
# => [#<struct Net::IMAP::FetchData seqno=397, attr={"BODY
[1.MIME]"=>"Content-Type: text/plain; charset=ISO-8859-1;
format=flowed\r\nContent-Transfer-Encoding: 7bit\r\nContent-
Disposition: inline\r\n\r\n"}>]

imap.fetch 397, 'BODY[2.MIME]'
# => [#<struct Net::IMAP::FetchData seqno=397, attr={"BODY
[2.MIME]"=>"Content-Type: text/html; charset=ISO-8859-1\r\nContent-
Transfer-Encoding: 7bit\r\nContent-Disposition: inline\r\n\r\n"}>]

imap.fetch 397, 'BODY[3.MIME]'
# => [#<struct Net::IMAP::FetchData seqno=397, attr={}>]

So the first chunk is text/plain, grab it:

imap.fetch 397, 'BODY[1]'
=> [#<struct Net::IMAP::FetchData seqno=397, attr={"BODY[1]"=>"..."}>]

See also RFC 3501 section 6.4.5.

http://www.rfc-editor.org/rfc/rfc3501.txt

--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net

I LIT YOUR GEM ON FIRE!
58479f76374a3ba3c69b9804163f39f4?d=identicon&s=25 Eric Hodel (Guest)
on 2007-01-20 22:55
(Received via mailing list)
On Jan 19, 2007, at 04:01, Martin Boese wrote:
>> the case with my test program. most of the results will come in plain
>
> If it is an option for you, try downloading the entire mail and use
> tmail or
> rubymail to parse/split it. Maybe the problem is with your imap
> server.
>
> http://www.lickey.com/rubymail/
> http://i.loveruby.net/en/projects/tmail/

No need.  The IMAP RFC, like most RFCs, takes a little practice to
read.  Plus you save bandwidth and processing time by only
downloading the chunks of the message you need.

--
Eric Hodel - drbrain@segment7.net - http://blog.segment7.net

A: Yes
Q: Is top-posting bad?
  — Derek Milhous Zumsteg
This topic is locked and can not be replied to.