add better algorithm to get fully qualified domain name for localhost

in smtplib.ehlo() and smtplib.helo().

closes patch #101103
closes bug   #110935
This commit is contained in:
Peter Schneider-Kamp 2000-08-10 14:02:23 +00:00
parent 10e1bf2f64
commit 7bc82bb1f0
1 changed files with 21 additions and 17 deletions

View File

@ -98,7 +98,6 @@ class SMTPRecipientsRefused(SMTPException):
self.args = ( recipients,)
class SMTPDataError(SMTPResponseException):
"""The SMTP server didn't accept the data."""
@ -108,6 +107,7 @@ class SMTPConnectError(SMTPResponseException):
class SMTPHeloError(SMTPResponseException):
"""The server refused our HELO reply."""
def quoteaddr(addr):
"""Quote a subset of the email addresses defined by RFC 821.
@ -133,6 +133,24 @@ def quotedata(data):
return re.sub(r'(?m)^\.', '..',
re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data))
def _get_fqdn_hostname(name):
name = string.strip(name)
if len(name) == 0:
name = socket.gethostname()
try:
hostname, aliases, ipaddrs = socket.gethostbyaddr(name)
except socket.error:
pass
else:
aliases.insert(0, hostname)
for name in aliases:
if '.' in name:
break
else:
name = hostname
return name
class SMTP:
"""This class manages a connection to an SMTP or ESMTP server.
SMTP Objects:
@ -288,14 +306,7 @@ class SMTP:
Hostname to send for this command defaults to the FQDN of the local
host.
"""
name=string.strip(name)
if len(name)==0:
name = socket.gethostname()
try:
name = socket.gethostbyaddr(name)[0]
except socket.error:
pass
self.putcmd("helo",name)
self.putcmd("helo", _get_fqdn_hostname(name))
(code,msg)=self.getreply()
self.helo_resp=msg
return (code,msg)
@ -305,14 +316,7 @@ class SMTP:
Hostname to send for this command defaults to the FQDN of the local
host.
"""
name=string.strip(name)
if len(name)==0:
name = socket.gethostname()
try:
name = socket.gethostbyaddr(name)[0]
except socket.error:
pass
self.putcmd("ehlo",name)
self.putcmd("ehlo", _get_fqdn_hostname(name))
(code,msg)=self.getreply()
# According to RFC1869 some (badly written)
# MTA's will disconnect on an ehlo. Toss an exception if