sleep for 60s when rate limit is hit for the first time

This commit is contained in:
Son 2021-10-12 14:53:30 +02:00
parent a8b3955fe6
commit 2524c8ab98

View file

@ -1858,24 +1858,37 @@ async def handle(envelope: Envelope) -> str:
return status.E523 return status.E523
if rate_limited(mail_from, rcpt_tos): if rate_limited(mail_from, rcpt_tos):
LOG.w("Rate Limiting applied for mail_from:%s rcpt_tos:%s", mail_from, rcpt_tos) LOG.w(
"Rate Limiting applied for mail_from:%s rcpt_tos:%s, retry in 60s",
mail_from,
rcpt_tos,
)
# slow down the rate a bit
await asyncio.sleep(60)
# add more logging info. TODO: remove # rate limit is still applied
if len(rcpt_tos) == 1: if rate_limited(mail_from, rcpt_tos):
alias = Alias.get_by(email=rcpt_tos[0]) LOG.w(
if alias: "Rate Limiting (no retry) applied for mail_from:%s rcpt_tos:%s",
LOG.w( mail_from,
"total number email log on %s, %s is %s, %s", rcpt_tos,
alias, )
alias.user, # add more logging info. TODO: remove
EmailLog.filter(EmailLog.alias_id == alias.id).count(), if len(rcpt_tos) == 1:
EmailLog.filter(EmailLog.user_id == alias.user_id).count(), alias = Alias.get_by(email=rcpt_tos[0])
) if alias:
LOG.w(
"total number email log on %s, %s is %s, %s",
alias,
alias.user,
EmailLog.filter(EmailLog.alias_id == alias.id).count(),
EmailLog.filter(EmailLog.user_id == alias.user_id).count(),
)
if should_ignore_bounce(envelope.mail_from): if should_ignore_bounce(envelope.mail_from):
return status.E207 return status.E207
else: else:
return status.E522 return status.E522
# Handle "out of office" auto notice. An automatic response is sent for every forwarded email # Handle "out of office" auto notice. An automatic response is sent for every forwarded email
# todo: remove logging # todo: remove logging