summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xLib/smtplib.py38
1 files changed, 21 insertions, 17 deletions
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index e5f0b03..f898a2f 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -98,7 +98,6 @@ class SMTPRecipientsRefused(SMTPException):
self.args = ( recipients,)
-
class SMTPDataError(SMTPResponseException):
"""The SMTP server didn't accept the data."""
@@ -108,6 +107,7 @@ class SMTPConnectError(SMTPResponseException):
class SMTPHeloError(SMTPResponseException):
"""The server refused our HELO reply."""
+
def quoteaddr(addr):
"""Quote a subset of the email addresses defined by RFC 821.
@@ -133,6 +133,24 @@ def quotedata(data):
return re.sub(r'(?m)^\.', '..',
re.sub(r'(?:\r\n|\n|\r(?!\n))', CRLF, data))
+def _get_fqdn_hostname(name):
+ name = string.strip(name)
+ if len(name) == 0:
+ name = socket.gethostname()
+ try:
+ hostname, aliases, ipaddrs = socket.gethostbyaddr(name)
+ except socket.error:
+ pass
+ else:
+ aliases.insert(0, hostname)
+ for name in aliases:
+ if '.' in name:
+ break
+ else:
+ name = hostname
+ return name
+
+
class SMTP:
"""This class manages a connection to an SMTP or ESMTP server.
SMTP Objects:
@@ -288,14 +306,7 @@ class SMTP:
Hostname to send for this command defaults to the FQDN of the local
host.
"""
- name=string.strip(name)
- if len(name)==0:
- name = socket.gethostname()
- try:
- name = socket.gethostbyaddr(name)[0]
- except socket.error:
- pass
- self.putcmd("helo",name)
+ self.putcmd("helo", _get_fqdn_hostname(name))
(code,msg)=self.getreply()
self.helo_resp=msg
return (code,msg)
@@ -305,14 +316,7 @@ class SMTP:
Hostname to send for this command defaults to the FQDN of the local
host.
"""
- name=string.strip(name)
- if len(name)==0:
- name = socket.gethostname()
- try:
- name = socket.gethostbyaddr(name)[0]
- except socket.error:
- pass
- self.putcmd("ehlo",name)
+ self.putcmd("ehlo", _get_fqdn_hostname(name))
(code,msg)=self.getreply()
# According to RFC1869 some (badly written)
# MTA's will disconnect on an ehlo. Toss an exception if