[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

IMAP stuff (or POP

Phil Cooperking

1/18/2007 8:52:00 PM

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

--
Posted via http://www.ruby-....

3 Answers

Martin Boese

1/19/2007 12:01:00 PM

0

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...
http://i.loveruby.net/en/proje...

Martin

On Thursday 18 January 2007 20:52, Phil Cooperking wrote:
> 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

Eric Hodel

1/20/2007 9:47:00 PM

0

On Jan 18, 2007, at 12:52, Phil Cooperking wrote:

> 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]']

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/r...

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

I LIT YOUR GEM ON FIRE!


Eric Hodel

1/20/2007 9:55:00 PM

0

On Jan 19, 2007, at 04:01, Martin Boese wrote:
> On Thursday 18 January 2007 20:52, Phil Cooperking wrote:
>> 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]']
>
> 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...
> http://i.loveruby.net/en/proje...

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.se...

A: Yes
Q: Is top-posting bad?
— Derek Milhous Zumsteg