in reply to Handling reconnection with Mail::IMAPClient

You end up in an infinite loop (even upon re-connection) because you have not a break statement condition for the outer loop: try to add one last statement after print "Succesfully reconnected!\n";.

EDIT:

I've lost a chunk of code while copy/pasting: it is the case then that after sleeping your connection goes down again (maybe is the server which close the connection?). You have to dig deeper and debug/print the status of the connection after re-connection to see why it goes down.

I'd also recommend to refactor the entire thing in smaller subroutines in order to better handle the overall logic.

Test also if this parameter can already help you out with disconnections/re-connections.


Saluti

Replies are listed 'Best First'.
Re^2: Handling reconnection with Mail::IMAPClient -- solved
by Discipulus (Canon) on Jan 27, 2023 at 08:37 UTC
    Hello markong,

    thanks! even more useful is the reconnect method I totally missed from the module documentation.

    As the module Carp::cluck on error issuing imap commands, then the $imap->noop seems to be a sane command to try.

    The following code acts as expected and reconnect to the imap server:

    while (1){ my $attempts = 1; my $max_attempts = 10; while ( !$imap->noop ){ print "Reconection retry $attempts..\n"; $imap->reconnect; if( $imap->IsConnected() ){ print "Reconnected succesfully!\n"; last; } else{ sleep 1; die "Impossible to reconnect: $@" if $attempts == $max_att +empts; $attempts++; } } print "IMAP connected\n" if $imap->IsConnected(); }

    L*

    PS January 31: see the definitive program

    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.