From: Jari Aalto <jari.aalto@cante•net>
To: git@vger•kernel.org
Subject: [PATCH] git-send-email.perl - Fix 550 EHLO argument does not match calling host
Date: Sun, 14 Mar 2010 01:56:41 +0200 [thread overview]
Message-ID: <87eijng4hy.fsf@jondo.cante.net> (raw)
In-Reply-To: 7vfx433l9x.fsf@alter.siamese.dyndns.org
Add new function maildomain() which returns FQDN for use in
send_message(). The value is passed to Net::SMTP HELO/EHLO handshake.
The domain name can also be set via --smtp-domain option.
The default value in Net::SMTP may not get through:
Net::SMTP=GLOB(0x267ec28)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x267ec28)<<< 550 EHLO argument does not match calling host
whereas using the FQDN, the result is:
Net::SMTP=GLOB(0x15b8e80)>>> EHLO host.example.com
Net::SMTP=GLOB(0x15b8e80)<<< 250-host.example.com Hello host.example.com [192.168.1.7]
Signed-off-by: Jari Aalto <jari.aalto@cante•net>
---
git-send-email.perl | 57 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 55 insertions(+), 2 deletions(-)
> Junio C Hamano <gitster@pobox•com> writes:
> I think you identified a good issue to tackle. But is it really the
> optimal solution?
>
> - Is it the best we can do to always make an empty connection only to
> check if the we have hosts locally known as mailhost or localhost
> listens to SMTP port? And calling this function again and again, even
> after sending one message to the same $smtp_server successfully ($smtp
> in the global scope is already set in that case)?
A new patch below. I made the value global, so that it's set only once
for the duration of program.
> - You are trying to improve the chance that $smtp_server likes the name
> your side identifies as; what does it have to do with your local
> "mailhost" or "localhost" listening to the SMTP port? These local MTA
> may be configured for local-only delivery after all.
There is now explicit option to set the name with option --mail-domain.
Hope this address the issue.
** applies after the other two patches **
Jari
diff --git a/git-send-email.perl b/git-send-email.perl
index 6af7bd3..ef7cc30 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -64,6 +64,7 @@ git send-email [options] <file | directory | rev-list options >
--smtp-pass <str> * Password for SMTP-AUTH; not necessary.
--smtp-encryption <str> * tls or ssl; anything else disables.
--smtp-ssl * Deprecated. Use '--smtp-encryption ssl'.
+ --smtp-domain <str> * The domain name sent to HELO/EHLO handshake
--smtp-debug <0|1> * Disable, enable Net::SMTP debug.
Automating:
@@ -131,6 +132,7 @@ my $have_email_valid = eval { require Email::Valid; 1 };
my $have_mail_address = eval { require Mail::Address; 1 };
my $smtp;
my $auth;
+my $MAIL_DOMAIN; # See maildomain()
sub unique_email_list(@);
sub cleanup_compose_files();
@@ -274,6 +276,7 @@ my $rc = GetOptions("sender|from=s" => \$sender,
"smtp-ssl" => sub { $smtp_encryption = 'ssl' },
"smtp-encryption=s" => \$smtp_encryption,
"smtp-debug:i" => \$debug_net_smtp,
+ "smtp-domain:s" => \$MAIL_DOMAIN,
"identity=s" => \$identity,
"annotate" => \$annotate,
"compose" => \$compose,
@@ -834,6 +837,48 @@ sub sanitize_address
}
+# Returns the local Fully Qualified Domain Name (FQDN) if available,
+# If this is not given to EHLO, the receiving SMTP may deny connection
+# Here is an example of Net::SMTP without explicit Helo: it
+# uses by default "localhost.localdomain"
+#
+# Net::SMTP=GLOB(0x267ec28)>>> EHLO localhost.localdomain
+# Net::SMTP=GLOB(0x267ec28)<<< 550 EHLO argument does not match calling host
+
+sub maildomain
+{
+ return $MAIL_DOMAIN if $MAIL_DOMAIN;
+
+ my $maildomain;
+ eval "use Net::SMTP";
+
+ unless ( $@ ) {
+ for my $host ( qw(mailhost localhost) ) {
+ my $smtp = Net::SMTP->new($host);
+ if (defined $smtp) {
+ my $domain = $smtp->domain;
+ $smtp->quit;
+
+ $maildomain = $domain
+ unless $^O eq 'darwin' && $domain =~ /\.local$/;
+
+ last if $maildomain;
+ }
+ }
+ }
+
+ unless ($maildomain) {
+ eval "use Net::Domain";
+ unless ( $@ ) {
+ my $domain = Net::Domain::domainname();
+ $maildomain = $domain
+ unless $^O eq 'darwin' && $domain =~ /\.local$/;
+ }
+ }
+
+ $MAIL_DOMAIN = $maildomain;
+}
+
# Returns 1 if the message was sent, and 0 otherwise.
# In actuality, the whole program dies when there
# is an error sending a message.
@@ -917,6 +962,8 @@ X-Mailer: git-send-email $gitversion
}
}
+ my $maildomain;
+
if ($dry_run) {
# We don't want to send the email.
} elsif ($smtp_server =~ m#^/#) {
@@ -936,13 +983,18 @@ X-Mailer: git-send-email $gitversion
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);
+ $maildomain = maildomain() || "localhost.localdomain";
+ $smtp ||= Net::SMTP::SSL->new($smtp_server,
+ Hello => $maildomain,
+ Port => $smtp_server_port);
}
else {
require Net::SMTP;
+ $maildomain = maildomain() || "localhost.localdomain";
$smtp ||= Net::SMTP->new((defined $smtp_server_port)
? "$smtp_server:$smtp_server_port"
: $smtp_server,
+ Hello => $maildomain,
Debug => $debug_net_smtp);
if ($smtp_encryption eq 'tls' && $smtp) {
require Net::SMTP::SSL;
@@ -962,9 +1014,10 @@ X-Mailer: git-send-email $gitversion
}
if (!$smtp) {
- die "Unable to initialize SMTP properly. Check config. ",
+ die "Unable to initialize SMTP properly. Check config and use --smtp-debug. ",
"VALUES: server=$smtp_server ",
"encryption=$smtp_encryption ",
+ "maildomain=$maildomain",
defined $smtp_server_port ? "port=$smtp_server_port" : "";
}
--
1.7.0
next prev parent reply other threads:[~2010-03-13 23:57 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-10 15:57 [PATCH] Do not strip empty lines / trailing spaces from a commit message template Sebastian Schuberth
2010-03-11 8:12 ` Jeff King
2010-03-11 8:31 ` Jeff King
2010-03-11 20:46 ` Junio C Hamano
2010-03-11 22:46 ` Jeff King
2010-03-12 5:54 ` Junio C Hamano
2010-03-12 17:07 ` Sebastian Schuberth
2010-03-12 23:13 ` Junio C Hamano
2010-03-13 17:36 ` [PATCH] git-send-email.perl - Fix 550 EHLO argument does not match calling host Jari Aalto
2010-03-13 22:32 ` Junio C Hamano
2010-03-13 23:56 ` Jari Aalto [this message]
2010-03-14 6:28 ` Junio C Hamano
2010-03-14 10:19 ` Jari Aalto
2010-03-14 12:09 ` Junio C Hamano
2010-03-14 14:55 ` Jari Aalto
2010-03-14 14:59 ` Jari Aalto
2010-03-14 10:21 ` Jari Aalto
2010-03-14 11:55 ` Junio C Hamano
2010-03-14 14:41 ` Jari Aalto
2010-03-14 15:03 ` Jari Aalto
2010-03-14 13:17 ` Jakub Narebski
2010-03-14 14:52 ` Jari Aalto
2010-03-14 15:15 ` [PATCH 1/3] git-send-email.perl: improve error message in send_message() Jari Aalto
2010-03-14 15:16 ` [PATCH 2/3] git-send-email.perl: add option --smtp-debug Jari Aalto
2010-03-14 15:16 ` [PATCH 3/3] git-send-email.perl - Fix 550 EHLO argument does not match calling host Jari Aalto
2010-03-14 19:53 ` Jakub Narebski
2010-03-14 20:20 ` Jari Aalto
2010-03-14 20:33 ` [PATCH] " Jari Aalto
-- strict thread matches above, loose matches on Subject: below --
2010-03-12 20:07 [PATCH] git-send-email.perl: improve error message in send_message() Jari Aalto
2010-03-12 21:53 ` [PATCH] git-send-email.perl: add option --smtp-debug Jari Aalto
2010-03-12 23:04 ` [PATCH] git-send-email.perl - Fix 550 EHLO argument does not match calling host Jari Aalto
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=87eijng4hy.fsf@jondo.cante.net \
--to=jari.aalto@cante$(echo .)net \
--cc=git@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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