mirror of
https://github.com/python/cpython.git
synced 2025-12-04 16:43:27 +00:00
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:
parent
10e1bf2f64
commit
7bc82bb1f0
1 changed files with 21 additions and 17 deletions
|
|
@ -98,7 +98,6 @@ class SMTPRecipientsRefused(SMTPException):
|
||||||
self.args = ( recipients,)
|
self.args = ( recipients,)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SMTPDataError(SMTPResponseException):
|
class SMTPDataError(SMTPResponseException):
|
||||||
"""The SMTP server didn't accept the data."""
|
"""The SMTP server didn't accept the data."""
|
||||||
|
|
||||||
|
|
@ -108,6 +107,7 @@ class SMTPConnectError(SMTPResponseException):
|
||||||
class SMTPHeloError(SMTPResponseException):
|
class SMTPHeloError(SMTPResponseException):
|
||||||
"""The server refused our HELO reply."""
|
"""The server refused our HELO reply."""
|
||||||
|
|
||||||
|
|
||||||
def quoteaddr(addr):
|
def quoteaddr(addr):
|
||||||
"""Quote a subset of the email addresses defined by RFC 821.
|
"""Quote a subset of the email addresses defined by RFC 821.
|
||||||
|
|
||||||
|
|
@ -133,6 +133,24 @@ def quotedata(data):
|
||||||
return re.sub(r'(?m)^\.', '..',
|
return re.sub(r'(?m)^\.', '..',
|
||||||
re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data))
|
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:
|
class SMTP:
|
||||||
"""This class manages a connection to an SMTP or ESMTP server.
|
"""This class manages a connection to an SMTP or ESMTP server.
|
||||||
SMTP Objects:
|
SMTP Objects:
|
||||||
|
|
@ -288,14 +306,7 @@ class SMTP:
|
||||||
Hostname to send for this command defaults to the FQDN of the local
|
Hostname to send for this command defaults to the FQDN of the local
|
||||||
host.
|
host.
|
||||||
"""
|
"""
|
||||||
name=string.strip(name)
|
self.putcmd("helo", _get_fqdn_hostname(name))
|
||||||
if len(name)==0:
|
|
||||||
name = socket.gethostname()
|
|
||||||
try:
|
|
||||||
name = socket.gethostbyaddr(name)[0]
|
|
||||||
except socket.error:
|
|
||||||
pass
|
|
||||||
self.putcmd("helo",name)
|
|
||||||
(code,msg)=self.getreply()
|
(code,msg)=self.getreply()
|
||||||
self.helo_resp=msg
|
self.helo_resp=msg
|
||||||
return (code,msg)
|
return (code,msg)
|
||||||
|
|
@ -305,14 +316,7 @@ class SMTP:
|
||||||
Hostname to send for this command defaults to the FQDN of the local
|
Hostname to send for this command defaults to the FQDN of the local
|
||||||
host.
|
host.
|
||||||
"""
|
"""
|
||||||
name=string.strip(name)
|
self.putcmd("ehlo", _get_fqdn_hostname(name))
|
||||||
if len(name)==0:
|
|
||||||
name = socket.gethostname()
|
|
||||||
try:
|
|
||||||
name = socket.gethostbyaddr(name)[0]
|
|
||||||
except socket.error:
|
|
||||||
pass
|
|
||||||
self.putcmd("ehlo",name)
|
|
||||||
(code,msg)=self.getreply()
|
(code,msg)=self.getreply()
|
||||||
# According to RFC1869 some (badly written)
|
# According to RFC1869 some (badly written)
|
||||||
# MTA's will disconnect on an ehlo. Toss an exception if
|
# MTA's will disconnect on an ehlo. Toss an exception if
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue