From: Michael Witten <mfwitten@gmail.com>
To: git@vger.kernel.org
Subject: [PATCH RFC3.5 06/12] send-email: Cleanup and streamline the SMTP code in send_message
Date: Sat, 18 Apr 2009 12:02:02 -0500 [thread overview]
Message-ID: <1240074128-16132-7-git-send-email-mfwitten@gmail.com> (raw)
In-Reply-To: <1240074128-16132-6-git-send-email-mfwitten@gmail.com>
Some of the code was never used or not necessary; it should
be easier to read now.
The code could even be simplified further, because Net::SMTP{,::SSL}
both take the PORT variable in their new methods (which, as of this
commit, are actually the same method). Moreover, both take a server
URI of the form 'host:port' that trumps any value passed to PORT.
Unfortunately, none of this is documented publicly, so it isn't
exploited out of purity.
Signed-off-by: Michael Witten <mfwitten@gmail.com>
---
git-send-email.perl | 93 +++++++++++++++++++++++++++-----------------------
1 files changed, 50 insertions(+), 43 deletions(-)
diff --git a/git-send-email.perl b/git-send-email.perl
index 2727c77..6e2ea2c 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -985,67 +985,74 @@ X-Mailer: git-send-email $gitversion
} else {
- if (!defined $smtp_server) {
- die "The required SMTP server is not properly defined."
- }
+ goto SEND_MAIL if $smtp;
+
+ if ($smtp_encryption =~ /ssl/i) {
+
+ use Net::SMTP::SSL;
+ $smtp = Net::SMTP::SSL->new($smtp_server, Port => $smtp_server_port // 465)
+ or die "Could not connect to SSL SMTP server '$smtp_server:$smtp_server_port'\n";
+
+ } else {
+
+ use Net::SMTP;
+
+ my $server_URI = (defined $smtp_server_port)
+ ? "$smtp_server:$smtp_server_port"
+ : $smtp_server;
+
+ $smtp = Net::SMTP->new($server_URI)
+ or die "Could not connect to SMTP server: '$server_URI'\n";
+
+ if ($smtp_encryption =~ /tls/i) {
- if ($smtp_encryption eq 'ssl') {
- $smtp_server_port ||= 465; # ssmtp
- require Net::SMTP::SSL;
- $smtp ||= Net::SMTP::SSL->new($smtp_server, Port => $smtp_server_port);
- }
- else {
- require Net::SMTP;
- $smtp ||= Net::SMTP->new((defined $smtp_server_port)
- ? "$smtp_server:$smtp_server_port"
- : $smtp_server);
- if ($smtp_encryption eq 'tls') {
- require Net::SMTP::SSL;
$smtp->command('STARTTLS');
- $smtp->response();
- if ($smtp->code == 220) {
- $smtp = Net::SMTP::SSL->start_SSL($smtp)
- or die "STARTTLS failed! ".$smtp->message;
- $smtp_encryption = '';
- # Send EHLO again to receive fresh
- # supported commands
- $smtp->hello();
- } else {
- die "Server does not support STARTTLS! ".$smtp->message;
- }
- }
- }
+ $smtp->response(); # so $smtp->code works.
+
+ die "Server does not support STARTTLS: " . $smtp->message . "\n"
+ unless $smtp->code == 220;
+
+ use Net::SMTP::SSL;
+ Net::SMTP::SSL->start_SSL($smtp)
+ or die "STARTTLS failed! " . $smtp->message . "\n";
+
+ # Send EHLO again to receive fresh
+ # supported commands:
- if (!$smtp) {
- die "Unable to initialize SMTP properly. Is there something wrong with your config?";
+ $smtp->hello();
+ }
}
if (defined $smtp_authuser) {
- if (!defined $smtp_authpass) {
+ unless (defined $smtp_authpass) {
system "stty -echo";
- do {
+ {
print "Password: ";
- $_ = <STDIN>;
+ $smtp_authpass = <STDIN>;
print "\n";
- } while (!defined $_);
-
- chomp($smtp_authpass = $_);
+ redo unless defined $smtp_authpass;
+ chomp($smtp_authpass);
+ }
system "stty echo";
}
- $auth ||= $smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp->message;
+ $smtp->auth($smtp_authuser, $smtp_authpass)
+ or die "Could not authenticate '$smtp_authuser': " . $smtp->message . "\n";
}
- $smtp->mail( $raw_from ) or die $smtp->message;
- $smtp->to( @recipients ) or die $smtp->message;
- $smtp->data or die $smtp->message;
- $smtp->datasend("$header\n$message") or die $smtp->message;
- $smtp->dataend() or die $smtp->message;
- $smtp->code =~ /250|200/ or die "Failed to send $subject\n".$smtp->message;
+ SEND_MAIL:
+
+ $smtp->mail($raw_from) and
+ $smtp->to(@recipients) and
+ $smtp->data and
+ $smtp->datasend("$header\n$message") and
+ $smtp->dataend or
+
+ die "Failed to send '$subject': " . $smtp->message . "\n";
}
if ($quiet) {
printf (($dry_run ? "Dry-" : "")."Sent %s\n", $subject);
--
1.6.2.2.479.g2aec
next prev parent reply other threads:[~2009-04-18 17:07 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-18 17:01 [PATCH RFC3.5 00/12] Introduction to Decreasing send-email Entropy Michael Witten
2009-04-18 17:01 ` [PATCH RFC3.5 01/12] send-email: Cleanup the usage text and docs a bit Michael Witten
2009-04-18 17:01 ` [PATCH RFC3.5 02/12] send-email: No longer repeatedly test if $smtp_server is a command Michael Witten
2009-04-18 17:01 ` [PATCH RFC3.5 03/12] send-email: Interpret --smtp-server "" as "use a default" Michael Witten
2009-04-18 17:02 ` [PATCH RFC3.5 04/12] send-email: Verification for --smtp-server and --smpt-server-port Michael Witten
2009-04-18 17:02 ` [PATCH RFC3.5 05/12] send-email: Improve redability and error-handling in send_message's sendmail code Michael Witten
2009-04-18 17:02 ` Michael Witten [this message]
2009-04-18 17:02 ` [PATCH RFC3.5 07/12] send-email: Cleanup send_message 'log' code Michael Witten
2009-04-18 17:02 ` [PATCH RFC3.5 08/12] send-email: Move Subject sanitization from --compose code to send_message Michael Witten
2009-04-18 17:02 ` [PATCH RFC3.5 09/12] Docs: send-email: Reorganize the CONFIGURATION section Michael Witten
2009-04-18 17:02 ` [PATCH RFC3.5 10/12] Docs: Embolden the CONFIGURATION references Michael Witten
2009-04-18 17:02 ` [PATCH RFC3.5 11/12] Docs: send-email: Clarification of sendemail.<identity> Michael Witten
2009-04-18 17:02 ` [PATCH RFC3.5 12/12] Docs: send-email: git send-email -> 'send-email' Michael Witten
2009-04-19 1:54 ` [PATCH RFC3.5 08/12] send-email: Move Subject sanitization from --compose code to send_message Jay Soffian
2009-04-19 2:37 ` Michael Witten
2009-04-19 14:13 ` Jay Soffian
2009-04-19 14:39 ` Michael Witten
2009-04-19 14:53 ` Michael Witten
2009-04-19 16:43 ` [PATCH RFC3.5.1 08/12] send-email: Simplify --compose subject sanitation Michael Witten
2009-04-21 2:34 ` Jeff King
2009-04-21 3:29 ` Michael Witten
2009-04-20 1:42 ` [PATCH RFC3.5 06/12] send-email: Cleanup and streamline the SMTP code in send_message Junio C Hamano
2009-04-20 5:38 ` Michael Witten
2009-04-20 6:43 ` Junio C Hamano
2009-04-19 1:51 ` [PATCH RFC3.5 05/12] send-email: Improve redability and error-handling in send_message's sendmail code Jay Soffian
2009-04-19 2:13 ` Michael Witten
2009-04-19 2:17 ` Thomas Adam
2009-04-19 2:43 ` Michael Witten
2009-04-19 4:44 ` Junio C Hamano
2009-04-19 13:49 ` [PATCH RFC3.5.1 05/12] send-email: Improve readability " Michael Witten
2009-04-19 14:16 ` [PATCH RFC3.5 05/12] send-email: Improve redability " Jay Soffian
2009-04-20 1:38 ` Junio C Hamano
2009-04-20 1:58 ` Junio C Hamano
2009-04-21 2:00 ` Jeff King
2009-04-21 3:14 ` Jeff King
2009-04-19 14:19 ` [PATCH RFC3.5.1 04/12] send-email: Verification for --smtp-server and --smpt-server-port Michael Witten
2009-04-20 15:53 ` Michael Witten
2009-04-20 1:42 ` [PATCH RFC3.5 " Junio C Hamano
2009-04-20 2:38 ` Junio C Hamano
2009-04-20 3:49 ` [PATCH RFC3.5 06/12] send-email: Cleanup and streamline the SMTP code in send_message Michael Witten
2009-04-20 3:49 ` [PATCH RFC3.5 04/12] send-email: Verification for --smtp-server and --smpt-server-port Michael Witten
2009-04-18 23:35 ` [PATCH RFC3.5 03/12] send-email: Interpret --smtp-server "" as "use a default" Wesley J. Landaker
2009-04-19 0:13 ` Michael Witten
2009-04-19 14:16 ` [PATCH RFC3.5.1 " Michael Witten
2009-04-20 1:41 ` [PATCH RFC3.5 " Junio C Hamano
2009-04-20 2:52 ` Michael Witten
2009-04-20 1:41 ` [PATCH RFC3.5 02/12] send-email: No longer repeatedly test if $smtp_server is a command Junio C Hamano
2009-04-20 2:37 ` Michael Witten
2009-04-20 4:21 ` Junio C Hamano
2009-04-20 4:53 ` Subject: " Michael Witten
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1240074128-16132-7-git-send-email-mfwitten@gmail.com \
--to=mfwitten@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).