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