On 2016-03-10, c...@isbd.net <c...@isbd.net> wrote: > # Read each message into a string and then parse with the email > module, if > # there's an error retrieving the message then just throw it away > # > try: > popmsg = pop3.retr(i+1) > except: > pop3.dele(i+1) > continue > > The trouble is that the error is (presumably) some sort of buffer size > limitation in pop3.dele(). If I trap the error then I still can't get > rid of the rogue E-Mail and, more to the point, I can't even identify > it so that the trap could report the error and tell me which message > was causing it.
You really, really should not be using bare "except:". Always specify which exceptions you are trying to catch. In this case, I think there are two problems. Firstly, I think whoever implemented poplib mis-read the POP3 specification, as they are applying the line-length limit to not just the POP3 commands and responses, but the email contents too. Secondly, you are just trying to carry on with the POP3 connection after it has thrown an exception. You can't do that, because you don't know what the problem was. My guess would be that what you are mostly seeing is a line in the email content that is over 2kB, which causes 'retr' to throw a "line too long" exception. You then blindly throw a "DELE" at the server, and when you try to read the response to that command it throws another "line too long" exception because (a) the server's actually still in the middle of sending the email contents and (b) there's a bug in the SSL poplib which means once it's thrown "line too long" it will keep doing so repeatedly. So what I think you need to do is: (a) after your "import poplib" add "poplib._MAXLINE = 10*1024*1024" or somesuch (i.e. increase it a lot), (b) get rid of your "except:" and work out what you really meant, checking what the error returned was before blindly throwing commands at a POP3 server in an unknown state. You may well need to disconnect and reconnect before continuing - or indeed you may well not need to catch any exception at all at this point after doing (a). -- https://mail.python.org/mailman/listinfo/python-list