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

[GSoC PATCH v4 1/2] Unify capture of SMTP errors

From
Zheng Yuting <05zyt30@gmail.com>
Date
Mar 16, 2025, 05:09 UTC
Message-ID
<20250316050920.3264895-2-05ZYT30@gmail.com>
In-Reply-To
<20250316050920.3264895-1-05ZYT30@gmail.com>

This change adds local variables $result and $error to store authentication return results and exception information respectively.

In the eval block, different auth methods are called depending on whether the SMTP authentication mechanism is specified, and true is returned when there is no exception.

After catching the exception, the error information is saved. This makes the error capture logic more centralized and easier to understand, and lays the foundation for subsequent expansion.

Signed-off-by: Zheng Yuting <05ZYT30@gmail.com>
---
 git-send-email.perl | 45 ++++++++++++++++++++++++++-------------------
 1 file changed, 26 insertions(+), 19 deletions(-)
diff --git a/git-send-email.perl b/git-send-email.perl
index 798d59b84f..8feb43e9f7 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -1419,7 +1419,7 @@ sub smtp_auth_maybe {
 		die "invalid smtp auth: '${smtp_auth}'";
 	}

-	# TODO: Authentication may fail not because credentials were
+	# Authentication may fail not because credentials were
 	# invalid but due to other reasons, in which we should not
 	# reject credentials.
 	$auth = Git::credential({
@@ -1431,25 +1431,32 @@ sub smtp_auth_maybe {
 		'password' => $smtp_authpass
 	}, sub {
 		my $cred = shift;
+		my $result;
+		my $error;
+
+		# catch all SMTP auth error in a unified eval block
+		eval {
+			if ($smtp_auth) {
+				my $sasl = Authen::SASL->new(
+					mechanism => $smtp_auth,
+					callback => {
+						user     => $cred->{'username'},
+						pass     => $cred->{'password'},
+						authname => $cred->{'username'},
+					}
+				);
+				$result = $smtp->auth($sasl);
+			} else {
+				$result = $smtp->auth($cred->{'username'}, $cred->{'password'});
+			}
+			1; # ensure true value is returned if no exception is thrown
+		} or do {
+			$error = $@ || 'Unknown error';
+		};

-		if ($smtp_auth) {
-			my $sasl = Authen::SASL->new(
-				mechanism => $smtp_auth,
-				callback => {
-					user => $cred->{'username'},
-					pass => $cred->{'password'},
-					authname => $cred->{'username'},
-				}
-			);
-
-			return !!$smtp->auth($sasl);
-		}
-
-		return !!$smtp->auth($cred->{'username'}, $cred->{'password'});
-	});
-
-	return $auth;
-}
+		# NOTE: SMTP status code handling will be added in a subsequent commit
+		return $result ? 1 : 0;
+	}

 sub ssl_verify_params {
 	eval {
--
2.48.1
Previous: Zheng YutingNext: Zheng Yuting
Message 6 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.