git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [GSoC PATCH v7 2/2] send-email: finer-grained SMTP error handling

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 24, 2025, 06:00 UTC
Message-ID
<xmqqh63jotn4.fsf@gitster.g>
In-Reply-To
<20250323022111.20226-3-05ZYT30@gmail.com>
Zheng Yuting <05zyt30@gmail.com> writes:
> +		if ($error) {

This block is full of overly long lines. Would it make sense to turn it into a helper sub and do just this here in the block

			return handle_smtp_error($error);

And then the remainder of the block would become a single helper function that is called only from here, losing 2 levels of indentation.

Show 16 quoted lines
> +			# check if an error was captured
> +			# parse SMTP status code from error message in:
> +			# https://www.rfc-editor.org/rfc/rfc5321.html
> +			if ($error =~ /\b(\d{3})\b/) {
> +				my $status_code = $1;
> +				if ($status_code =~ /^4/) {
> +					# 4yz: Transient Negative Completion reply
> +					warn "SMTP temporary error (status code $status_code): $error";
> +					return 1;
> +				} elsif ($status_code =~ /^5/) {
> +					# 5yz: Permanent Negative Completion reply
> +					warn "SMTP permanent error (status code $status_code): $error";
> +					return 0;
> +				} else {
> +					# if no recognized status code is found, treat as transient error
> +					warn "SMTP unknown error: $error. Treating as permanent failure.";

The comment and warning message say different things. I suspect that the warning message is wrong, as the branch returns 1 to signal the caller to do the same thing a the 4yz transient case?

Show 18 quoted lines
> +					return 1;
> +				}
> +			} else {
> +				# if no status code is found, treat as transient error
> +				warn "SMTP generic error: $error";
> +				return 1;
> +			}
> +		} elsif (!defined $result) {
> +			# if no error and no result is returned, treat as transient error
> +			warn "SMTP no result error: $error";
> +		    return 1; 
> +		}
> +		else {
> +			return $result ? 1 : 0;
> +		}
>  	});
>  
>  	return $auth;
Previous: Zheng YutingNext: Zheng Yuting
Message 20 of 27 in “Refactor SMTP Auth Error Handling”
  1. 0/1 Refactor SMTP Auth Error HandlingZheng Yuting, Mar 12, 2025
  2. 1/1 Unify SMTP auth error handlingZheng Yuting, Mar 12, 2025
  3. Junio C HamanoMar 13, 2025
  4. Yuting ZhengMar 14, 2025
  5. 0/2 smtp_auth_maybe: unified error capture and status code processing optimizationZheng Yuting, Mar 16, 2025
  6. 1/2 Unify capture of SMTP errorsZheng Yuting, Mar 16, 2025
  7. 2/2 Error handling for SMTP status codesZheng Yuting, Mar 16, 2025
  8. Junio C HamanoMar 17, 2025
  9. 0/2 sendemail: improve error capture and status code handlingZheng Yuting, Mar 19, 2025
  10. 1/2 sendemail: capture errors in an eval {} blockZheng Yuting, Mar 19, 2025
  11. 2/2 sendemail: finer-grained SMTP error handlingZheng Yuting, Mar 19, 2025
  12. Meet SoniMar 19, 2025
  13. 0/2 send-email: improve error capture and status code handlingZheng Yuting, Mar 21, 2025
  14. 1/2 send-email: capture errors in an eval {} blockZheng Yuting, Mar 21, 2025
  15. 2/2 send-email: finer-grained SMTP error handlingZheng Yuting, Mar 21, 2025
  16. Junio C HamanoMar 21, 2025
  17. 0/2 send-email: improve error capture and status code handlingZheng Yuting, Mar 23, 2025
  18. 1/2 send-email: capture errors in an eval {} blockZheng Yuting, Mar 23, 2025
  19. 2/2 send-email: finer-grained SMTP error handlingZheng Yuting, Mar 23, 2025
  20. Junio C HamanoMar 24, 2025
  21. 0/2 send-email: improve error capture and status code handlingZheng Yuting, Mar 24, 2025
  22. 1/2 send-email: capture errors in an eval {} blockZheng Yuting, Mar 24, 2025
  23. 2/2 send-email: finer-grained SMTP error handlingZheng Yuting, Mar 24, 2025
  24. Junio C HamanoMar 25, 2025
  25. 0/2 send-email: improve error capture and status code handlingZheng Yuting, Mar 26, 2025
  26. 1/2 send-email: capture errors in an eval {} blockZheng Yuting, Mar 26, 2025
  27. 2/2 send-email: finer-grained SMTP error handlingZheng Yuting, Mar 26, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.