__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 0695840..6f37cee 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -237,9 +237,18 @@
             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.