diff --git a/rhodecode/lib/rcmail/smtp_mailer.py b/rhodecode/lib/rcmail/smtp_mailer.py --- a/rhodecode/lib/rcmail/smtp_mailer.py +++ b/rhodecode/lib/rcmail/smtp_mailer.py @@ -27,6 +27,7 @@ import smtplib from socket import sslerror from email.utils import formatdate from rhodecode.lib.rcmail.message import Message +from rhodecode.lib.rcmail.utils import DNS_NAME class SmtpMailer(object): @@ -68,9 +69,11 @@ class SmtpMailer(object): raw_msg = msg.to_message() if self.ssl: - smtp_serv = smtplib.SMTP_SSL(self.mail_server, self.mail_port) + smtp_serv = smtplib.SMTP_SSL(self.mail_server, self.mail_port, + local_hostname=DNS_NAME.get_fqdn()) else: - smtp_serv = smtplib.SMTP(self.mail_server, self.mail_port) + smtp_serv = smtplib.SMTP(self.mail_server, self.mail_port, + local_hostname=DNS_NAME.get_fqdn()) if self.tls: smtp_serv.ehlo() @@ -95,4 +98,4 @@ class SmtpMailer(object): smtp_serv.quit() except sslerror: # sslerror is raised in tls connections on closing sometimes - pass + smtp_serv.close() diff --git a/rhodecode/lib/rcmail/utils.py b/rhodecode/lib/rcmail/utils.py new file mode 100644 --- /dev/null +++ b/rhodecode/lib/rcmail/utils.py @@ -0,0 +1,19 @@ +""" +Email message and email sending related helper functions. +""" + +import socket + + +# Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of +# seconds, which slows down the restart of the server. +class CachedDnsName(object): + def __str__(self): + return self.get_fqdn() + + def get_fqdn(self): + if not hasattr(self, '_fqdn'): + self._fqdn = socket.getfqdn() + return self._fqdn + +DNS_NAME = CachedDnsName() \ No newline at end of file