dcparker / ruby-gmail

A Rubyesque interface to Gmail. Connect to Gmail via IMAP and manipulate emails and labels. Send email with your Gmail account via SMTP. Includes full support for parsing and generating MIME messages.
http://dcparker.github.com/ruby-gmail
790 stars 123 forks source link

IETF PARSING FAIL! (''A'' structure) #13

Closed justinko closed 10 years ago

justinko commented 14 years ago

This is a wonderful gem. Thank you for your hard work!

I keep getting this error from certain emails:

IETF PARSING FAIL! (''A'' structure)

Shouldn't ruby-gmail be able to parse any email that Gmail can parse?

dcparker commented 14 years ago

Yes, it should. I'd like to get the pure-ruby parser to be able to parse everything; but it seems there are small kinks in it sometimes.

If you would be willing to send a copy of the raw email text (optionally scrubbed of any sensitive info), I will find out what is causing the trouble parsing.

Also, TMail is another rubygem that is very capable for parsing these messages and will probably get things right. Just have TMail parse the gmail_message.body.

justinko commented 14 years ago

Well, I grabbed the email that is causing the error, and did this:

def from_parsed(parsed)
    case parsed
    when Array
        raise parsed.inspect
        if parsed[0].is_a?(Hash) && (parsed[1].is_a?(Hash) || parsed[1].is_a?(String))

The parsed argument DOES contain a hash at index 0 AND a hash at index 1. I do not know why raise is being called, the first condition should be returning true.

justinko commented 14 years ago

I can't just parse the body with TMail because I need to grab the message.to, and currently that is the only way. Correct me if I'm wrong.

justinko commented 14 years ago

I've resorted to just using net/imap and TMail for my app. Btw, doesn't the "mail" gem that's going into Rails3 kinda make this gem un-needed?

jackbit commented 14 years ago

The same problem with me, if i am using GMAIL Account from domain gmail.com but when i use business gmail account using domain. it is fine.

I got this error when accessing email.message, My codes:

@imap = Gmail.new(current_user.gmail.account, current_user.gmail.password) do |g|
  emails = g.inbox.emails(:after => 3.days.ago)
  emails.each do |email|
    user_email = Mail.create({ :subject => email.message.subject,
                               :message => email.message.text,
                               :sender  => email.message.from,
                               :receiver => email.message.to,
                               :received_date => email.message.headers['date']
                             })
        end
  end

The error is : D:/ruby/lib/ruby/gems/1.8/gems/ruby-gmail-0.0.8/lib/mime/entity.rb:47:in from_parsed' D:/ruby/lib/ruby/gems/1.8/gems/ruby-gmail-0.0.8/lib/mime/entity.rb:40:infrom_parsed' D:/ruby/lib/ruby/gems/1.8/gems/ruby-gmail-0.0.8/lib/mime/entity.rb:40:in collect' D:/ruby/lib/ruby/gems/1.8/gems/ruby-gmail-0.0.8/lib/mime/entity.rb:40:infrom_parsed' D:/ruby/lib/ruby/gems/1.8/gems/ruby-gmail-0.0.8/lib/mime/entity.rb:20:in initialize' D:/ruby/lib/ruby/gems/1.8/gems/ruby-gmail-0.0.8/lib/gmail/message.rb:36:innew' D:/ruby/lib/ruby/gems/1.8/gems/ruby-gmail-0.0.8/lib/gmail/message.rb:36:in `message'