vttranlina commented on a change in pull request #833: URL: https://github.com/apache/james-project/pull/833#discussion_r781019714
########## File path: src/adr/0051-email-rate-limiting.md ########## @@ -0,0 +1,40 @@ +# Email rate limiting + +Date: 2021-01-10 + +## Status + +// todo + +## Context + +Rate limiting is one of the common features. Examples: SaaS is one https://www.fastmail.help/hc/en-us/articles/1500000277382-Account-limits#sending/receiving, https://support.google.com/mail/answer/22839 +They limit how many emails you can send/receive from/to each email account over a given period of time. +We believe the rate-limiting will help James has more control of the resource and easy to dynamic config the user policy. It also complements the storage quota. + +## Decision + +- Set up a new maven project dedicated to rating limiting +- Provide 2 criteria to limit to each duration: number of emails and total size of emails +- This can be done via mailets: + - PerSenderRateLimit is per sender + - PerRecipientRateLimit is per recipient + - GlobalRateLimit for everyone +Depending on the position in the pipeline this could allow rating limit all emails in transit, relayed emails or locally delivered emails. +The rate limit will be config in [mailetcontainer.xml](/server/apps/distributed-app/sample-configuration/mailetcontainer.xml). + +- Provide the interface `RateLimiter`, that will evaluate the current rate limit and return result acceptable or exceeded. +- Create the implement InmemoryRateLimiter, which use guava-rate-limiter Review comment: -> ## References -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
