[Tmail-talk] Reading From a UnixMbox file.

James B. Byrne byrnejb at harte-lyne.ca
Mon May 4 17:39:07 EDT 2009


I am trying to test a script that generates email using uses Rails
ActionMailer 2.3.2.  I have installed the TMail 1.2.3.1 gem.

The way that this works is this. In the script I dump the contents
of ActionMailer::Base.deliveries into a disk file:


    ActionMailer::Base.deliveries.each do |msg|
      fo = File.open('deliver.txt','a')
      fo.write(msg)
      fo.write("\n")
      fo.close
    end

To the best of my ability to determine, this creates a valid mbox
format file.  I might be wrong but according to what I have read,
the mbox format simply requires a blank line after each message.  A
message is deemed to begin with the 'From: ' header.

The contents of this disk file appear correct given the foregoing
expectation:

$ cat deliver.txt
From: Forex at harte-lyne.ca
Reply-To: support at harte-lyne.ca
To: forex.test at harte-lyne.ca
Subject: [ForEx] 2009-05-04 - Foreign Exchange Rates Notice
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary=mimepart_49ff56b0689be_25e01588753607c83ab


--mimepart_49ff56b0689be_25e01588753607c83ab
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: Quoted-printable
Content-Disposition: inline
...

--mimepart_49ff56b0689be_25e01588753607c83ab--

--- end of file here - not part of actual file

I gather from the documentation that I should be able to read this
message back into a TMail::Mail object doing this:


>> mbox = TMail::UNIXMbox.new('deliver.txt', nil, true)
=> #<TMail::UNIXMbox:0x2abdae52cb00
@finalizer=#<Proc:0x00002abdabad57f8@/usr/lib64/ruby/gems/1.8/gems/tmail-1.2.3.1/lib/tmail/mailbox.rb:249>,
@readonly=true, @real=#<TMail::MhMailbox
/tmp/ruby_tmail_9702_0.657023759401038>, @closed=false,
@filename="deliver.txt">
>> mbox.each do |port|
?>   mail = TMAIL::Mail.new(port)
>>   puts mail.subject
>>   y mail.methods.sort
>> end
=> Mon May 04 17:11:07 -0400 2009

What I get is a time object and I see no mail message.

If I try this instead, taken from the example given in the
documentation:

>> mailbox = TMail::UNIXMbox.new('deliver.txt', nil, true)
=> #<TMail::UNIXMbox:0x2abdae4d6b10
@finalizer=#<Proc:0x00002abdabad57f8@/usr/lib64/ruby/gems/1.8/gems/tmail-1.2.3.1/lib/tmail/mailbox.rb:249>,
@readonly=true, @real=#<TMail::MhMailbox
/tmp/ruby_tmail_9702_0.0737049330962023>, @closed=false,
@filename="deliver.txt">
>>  @emails = []
=> []
>> @emails =  mailbox.each_port { |m| @emails << TMail::Mail.new(m) }
=> Mon May 04 17:36:07 -0400 2009
>> @emails.class
=> Time

Another time object is returned.  What is going on here. What am I
doing wrong?



-- 
***          E-Mail is NOT a SECURE channel          ***
James B. Byrne                mailto:ByrneJB at Harte-Lyne.ca
Harte & Lyne Limited          http://www.harte-lyne.ca
9 Brockley Drive              vox: +1 905 561 1241
Hamilton, Ontario             fax: +1 905 561 0757
Canada  L8E 3C3



More information about the Tmail-talk mailing list