Email sending: Set rate limit to 5 minutes for gmail and hotmail and one second other wise

This commit is contained in:
Kovid Goyal 2010-11-25 13:57:35 -07:00
parent 16a9d973ca
commit 0b24aeb77f

View File

@ -66,7 +66,6 @@ class EmailJob(BaseJob): # {{{
class Emailer(Thread): # {{{ class Emailer(Thread): # {{{
MAX_RETRIES = 1 MAX_RETRIES = 1
RATE_LIMIT = 65 # seconds between connections to the SMTP server
def __init__(self, job_manager): def __init__(self, job_manager):
Thread.__init__(self) Thread.__init__(self)
@ -74,7 +73,14 @@ class Emailer(Thread): # {{{
self.jobs = Queue() self.jobs = Queue()
self.job_manager = job_manager self.job_manager = job_manager
self._run = True self._run = True
self.last_send_time = time.time() - self.RATE_LIMIT self.rate_limit = 1
opts = email_config().parse()
rh = opts.relay_host
if rh and (
'gmail.com' in rh or 'live.com' in rh):
self.rate_limit = 301
self.last_send_time = time.time() - self.rate_limit
def stop(self): def stop(self):
self._run = False self._run = False
@ -102,7 +108,7 @@ class Emailer(Thread): # {{{
failed = False failed = False
if try_count > 0: if try_count > 0:
job.log_write('\nRetrying in %d seconds...\n' % job.log_write('\nRetrying in %d seconds...\n' %
self.RATE_LIMIT) self.rate_limit)
try: try:
self.sendmail(job) self.sendmail(job)
break break
@ -140,7 +146,7 @@ class Emailer(Thread): # {{{
self.jobs.put(job) self.jobs.put(job)
def sendmail(self, job): def sendmail(self, job):
while time.time() - self.last_send_time <= self.RATE_LIMIT: while time.time() - self.last_send_time <= self.rate_limit:
time.sleep(1) time.sleep(1)
try: try:
opts = email_config().parse() opts = email_config().parse()