On Sun, Nov 3, 2019 at 12:56 AM Nathan Hartman <hartman.nat...@gmail.com> wrote:
> On Sat, Nov 2, 2019 at 4:00 AM Yasuhito FUTATSUKI <futat...@poem.co.jp> > wrote: > >> <snip> >> >> > finally: >> > server.quit() >> > ]]] >> >> As I mentioned before (but I couldn't tell what I want, sorry), >> smtplib.SMTP.quit() can raise exception. If server.quit() in finally >> block has raised an exception and it isn't caught, it will overwrite >> the exception raised in try block or re-raised in exception block. > > It seems there's another problem. Apparently the 'raise .. from' construct is Python 3+. Which means this breaks the mailer for Python 2.7. I found this when I tested on Python 2.7 earlier and the script terminated with a syntax error at 'raise MessageSendFailure from detail'. Which do you think is better: Remove the 'from detail' and lose the original cause of MessageSendFailure. MessageSendFailure is meant to be handled and ignored (possibly only used for outputting additional logging), allowing the mailer to continue mailing, so this might be acceptable. Or, alternately: Check which version of Python is running, use 'from detail' only when Python 3+. Thanks, Nathan [[[ Index: tools/hook-scripts/mailer/mailer.py =================================================================== --- tools/hook-scripts/mailer/mailer.py (revision 1869339) +++ tools/hook-scripts/mailer/mailer.py (working copy) @@ -325,12 +325,12 @@ except smtplib.SMTPRecipientsRefused as detail: sys.stderr.write("mailer.py: SMTP recipient(s) refused: %s: %s\n" % (self.to_addrs, detail,)) - raise MessageSendFailure from detail + raise MessageSendFailure # from detail <-- breaks on Python 2.7 !!!! except smtplib.SMTPSenderRefused as detail: sys.stderr.write("mailer.py: SMTP sender refused: %s: %s\n" % (self.from_addr, detail,)) - raise MessageSendFailure from detail + raise MessageSendFailure # from detail <-- breaks on Python 2.7 !!!! except smtplib.SMTPException as detail: # All other errors are fatal; this includes: @@ -339,7 +339,11 @@ raise finally: - server.quit() + try: + server.quit() + except smtplib.SMTPException as detail: + sys.stderr.write("mailer.py: Error occurred during SMTP session cleanup: %s\n" + % (detail,)) class StandardOutput(OutputBase): ]]]