From: Barry Warsaw Date: Tue, 26 Mar 2002 20:27:35 +0000 (+0000) Subject: __init__(): We'll try to be more RFC 2821 compliant by providing for a X-Git-Tag: v2.3c1~6316 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=13e34f7a192d6f262a5bc000a3547c1d5ce59bee;p=thirdparty%2FPython%2Fcpython.git __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. --- diff --git a/Lib/smtplib.py b/Lib/smtplib.py index 0695840df78f..6f37ceea1307 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.