summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2002-03-26 20:27:35 (GMT)
committerBarry Warsaw <barry@python.org>2002-03-26 20:27:35 (GMT)
commit13e34f7a192d6f262a5bc000a3547c1d5ce59bee (patch)
tree0c6da550b9490189eb1554d90a72006c605cf916
parent69f0a8e42fa5f5420167d054df987ef529164d0d (diff)
downloadcpython-13e34f7a192d6f262a5bc000a3547c1d5ce59bee.zip
cpython-13e34f7a192d6f262a5bc000a3547c1d5ce59bee.tar.gz
cpython-13e34f7a192d6f262a5bc000a3547c1d5ce59bee.tar.bz2
__init__(): We'll try to be more RFC 2821 compliant by providing for a
better local_hostname default. According to RFC 2821, it is recommended that the fqdn hostname be provided in the EHLO/HELO verb and if that can't be calculated, to use a domain literal. The rationale for this change is documented in SF patch #497736 which also had privacy concerns about leaking the fqdn in the EHLO/HELO. We decided this wasn't a big concern because no user data is leaked, and the IP will always be leaked. The local_hostname argument is provided for those clients that are super paranoid. Using localhost.localdomain may break some strict smtp servers so we decided against using it as the default.
-rwxr-xr-xLib/smtplib.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index 0695840..6f37cee 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -237,9 +237,18 @@ class SMTP:
if code != 220:
raise SMTPConnectError(code, msg)
if local_hostname:
- self.local_hostname = local_hostname
+ self.local_hostname = local_hostname
else:
- self.local_hostname = socket.getfqdn()
+ # RFC 2821 says we should use the fqdn in the EHLO/HELO verb, and
+ # if that can't be calculated, that we should use a domain literal
+ # instead (essentially an encoded IP address like [A.B.C.D]).
+ fqdn = socket.getfqdn()
+ if '.' in fqdn:
+ self.local_hostname = fqdn
+ else:
+ # We can't find an fqdn hostname, so use a domain literal
+ addr = socket.gethostbyname(socket.gethostname())
+ self.local_hostname = '[%s]' % addr
def set_debuglevel(self, debuglevel):
"""Set the debug output level.