# Net::imap exceptions

**URL:** <https://www.ruby-forum.com/t/net-imap-exceptions/96428>\
**Category:** Ruby\
**Created:** [January 24, 2006, 4:56am UTC](https://www.ruby-forum.com/t/net-imap-exceptions/96428 "2006-01-24T04:56:04Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![russellf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/7bcc69/32.png) [@russellf](https://www.ruby-forum.com/u/russellf)\
**Post date:** [January 24, 2006, 4:56am UTC](https://www.ruby-forum.com/t/net-imap-exceptions/96428/1 "2006-01-24T04:56:04Z")

</div>

Hi,  
I have a program that I am using to do password auditing on various  
IMAP servers. It defines this method:

def tryIMAP (host, usessl, user, pass)

```
proto = usessl ? "IMAPS" : "IMAP"

```

begin  
imap = Net::IMAP.new(host, usessl ? 993 : 143, usessl)  
rescue =\> e  
imap.disconnect if imap  
STDERR.print “#{host} #{proto} #{e.to\_s}\n”;  
raise RuntimeError, “#{proto} failed”  
end  
begin  
imap.login( user, pass)  
imap.logout  
imap.disconnect  
‘success’  
rescue Net::IMAP::NoResponseError  
‘failure’  
end

end

But the rescue clause does not catch all errors:

(Net::IMAP::ByeResponseError)948:in `receive_responses': * BYE Autologout; idle for too long from /usr/lib/ruby/1.8/net/imap.rb:932:in`synchronize’  
from /usr/lib/ruby/1.8/net/imap.rb:932:in `receive_responses' from /usr/lib/ruby/1.8/net/imap.rb:917:in`initialize’  
from /usr/lib/ruby/1.8/net/imap.rb:916:in `start' from /usr/lib/ruby/1.8/net/imap.rb:916:in`initialize’  
from test.rb:11:in `new' from test.rb:11:in`tryIMAP’  
from test.rb:143  
from test.rb:100:in `each' from test.rb:100 from test.rb:89:in`each’  
from test.rb:89  
from test.rb:88:in `open’  
from test.rb:88

How can I catch these errors?

---

<div class="post-metadata">

**Author:** ![russellf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/7bcc69/32.png) [@russellf](https://www.ruby-forum.com/u/russellf)\
**Post date:** [January 24, 2006, 8:13am UTC](https://www.ruby-forum.com/t/net-imap-exceptions/96428/2 "2006-01-24T08:13:22Z")

</div>

-----BEGIN PGP SIGNED MESSAGE-----  
Hash: SHA1

Russell F. wrote:

> ```
> imap.disconnect if imap
> 
> ```
> 
> end
> 
> end
> 
> But the rescue clause does not catch all errors:
> 
> (Net::IMAP::ByeResponseError)948:in `receive\_responses’: \* BYE  
> Autologout; idle for too long

[snip]

> How can I catch these errors?

Change the rescue-line to:

> rescue Net::IMAP::NoResponseError, Net::IMAP::ByeResponseError, Net::IMAP::BadResponseError

and so on. Maybe it helps to rescue Net::IMAP::Error only, but can’t  
have a look at the implementation of the other exceptions at the moment.

HTH

Stefan  
-----BEGIN PGP SIGNATURE-----  
Version: GnuPG v1.4.0 (MingW32)

iD8DBQFD1dLM9S2Eui6zfdQRAiiRAJ9CMxchp2129sP5srKNpFHhEUIIgQCfU+ov  
4bEy3i+wvmei5HvOR8RYDKk=  
=Y0JS  
-----END PGP SIGNATURE-----

---

<div class="post-metadata">

**Author:** ![russellf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/7bcc69/32.png) [@russellf](https://www.ruby-forum.com/u/russellf)\
**Post date:** [January 24, 2006, 8:05pm UTC](https://www.ruby-forum.com/t/net-imap-exceptions/96428/3 "2006-01-24T20:05:11Z")

</div>

Stefan M. wrote:

Thanks for your response Stefan!

> > How can I catch these errors?
> 
> Change the rescue-line to:
> 
> > rescue Net::IMAP::NoResponseError, Net::IMAP::ByeResponseError, Net::IMAP::BadResponseError

That was going to be my next try. Hmmm… last time I tried putting  
more than one exception on a rescue statement I got a syntax error??  
I’ll try again – must have been some other issue.

> and so on. Maybe it helps to rescue Net::IMAP::Error only, but can’t  
> have a look at the implementation of the other exceptions at the moment.

Just a check on my understanding of how things _should_ work:

I thought that an unadorned “rescue” _should_ catch _all_ exceptions.  
Is this correct? Should I file a bug report? Where to?

Russell

---

<div class="post-metadata">

**Author:** ![russellf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/7bcc69/32.png) [@russellf](https://www.ruby-forum.com/u/russellf)\
**Post date:** [January 26, 2006, 8:43pm UTC](https://www.ruby-forum.com/t/net-imap-exceptions/96428/4 "2006-01-26T20:43:45Z")

</div>

Russell F. wrote:

> more than one exception on a rescue statement I got a syntax error??  
> I’ll try again – must have been some other issue.
> 
> > and so on. Maybe it helps to rescue Net::IMAP::Error only, but can’t  
> > have a look at the implementation of the other exceptions at the moment.
> 
> Just a check on my understanding of how things _should_ work:
> 
> I thought that an unadorned “rescue” _should_ catch _all_ exceptions.  
> Is this correct? Should I file a bug report? Where to?

No, it will only catch all Exceptions that are derived from  
StandardError (as I read Pickaxe II, page 108).

Figure 8.1 on page 109 could be helpful.

The exception gets thrown in

> imap = Net::IMAP.new(host, usessl ? 993 : 143, usessl)

as the backtrace tells:

> …  
> from /usr/lib/ruby/1.8/net/imap.rb:916:in `initialize' from test.rb:11:in`new’  
> from test.rb:11:in `tryIMAP’  
> …

and on line 12 is only the standard rescue

> rescue =\> e

If you add the IMAP-Exceptions there it should work (and raise a  
RuntimeException).

---

<div class="post-metadata">

**Author:** ![russellf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/7bcc69/32.png) [@russellf](https://www.ruby-forum.com/u/russellf)\
**Post date:** [January 26, 2006, 9:34pm UTC](https://www.ruby-forum.com/t/net-imap-exceptions/96428/5 "2006-01-26T21:34:55Z")

</div>

Stefan M. wrote:

> No, it will only catch all Exceptions that are derived from  
> StandardError (as I read Pickaxe II, page 108).

Ah! missed that, my bad!

Thanks Stefan!

---

<div class="post-metadata">

**Author:** ![russellf](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/7bcc69/32.png) [@russellf](https://www.ruby-forum.com/u/russellf)\
**Post date:** [January 25, 2006, 12:52am UTC](https://www.ruby-forum.com/t/net-imap-exceptions/96428/6 "2006-01-25T00:52:58Z")

</div>

Russell F. wrote:

> Stefan M. wrote:
> 
> Thanks for your response Stefan!
> 
> > > How can I catch these errors?
> > 
> > Change the rescue-line to:
> > 
> > > rescue Net::IMAP::NoResponseError, Net::IMAP::ByeResponseError, Net::IMAP::BadResponseError
> 
> That was going to be my next try.

I have now tried this and it still throws the exception with an explicit  
rescue for that error.

Russell
