<div dir="auto">IMAP4.close closes the selected inbox and commits changes such as deletions. It is not called on IMAP4.__exit__ (only logout is, which doesn't call close in its call stack) however, so:<br><br></div>
<div dir="auto">with imaplib.IMAP4_SSL(...) as i:<br></div>
<div dir="auto">    ...<br><br></div>
<div dir="auto">would fail to commit those changes. close must be explicitly invoked i.e.<br><br></div>
<div dir="auto">with imaplib.IMAP4_SSL(...) as i:<br></div>
<div dir="auto">    ...<br></div>
<div dir="auto">    i.close()<br><br></div>
<div dir="auto">This is counterintuitive however, as the with statement is meant to automatically clean up. Another programmer might come along and delete i.close() because it seems unnecessary. Now changes aren't being committed and the programmer doesn't realize it's because of this weird Python idiosyncracy. <br><br></div>
<div dir="auto">Python IO such as open commits changes automatically, so I'm not sure why IMAP4 doesn't and only logs out. </div>