summaryrefslogtreecommitdiffstats
path: root/Lib/smtplib.py
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 /Lib/smtplib.py
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.
Diffstat (limited to 'Lib/smtplib.py')
-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.