diff options
-rwxr-xr-x | Lib/smtplib.py | 38 |
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 |