diff options
author | Barry Warsaw <barry@python.org> | 2002-03-26 20:27:35 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2002-03-26 20:27:35 (GMT) |
commit | 13e34f7a192d6f262a5bc000a3547c1d5ce59bee (patch) | |
tree | 0c6da550b9490189eb1554d90a72006c605cf916 | |
parent | 69f0a8e42fa5f5420167d054df987ef529164d0d (diff) | |
download | cpython-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-x | Lib/smtplib.py | 13 |
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. |