mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-25 02:55:46 +03:00
Add config to change the delay before sending a notification email (#16696)
This commit is contained in:
parent
1b9319209c
commit
9f6c644825
4 changed files with 17 additions and 9 deletions
1
changelog.d/16696.feature
Normal file
1
changelog.d/16696.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add a setting to be able to tweak the delay without interaction before an email is sent following a notification.
|
|
@ -680,6 +680,11 @@ This setting has the following sub-options:
|
||||||
has missed. Disabled by default.
|
has missed. Disabled by default.
|
||||||
* `notif_for_new_users`: Set to false to disable automatic subscription to email
|
* `notif_for_new_users`: Set to false to disable automatic subscription to email
|
||||||
notifications for new users. Enabled by default.
|
notifications for new users. Enabled by default.
|
||||||
|
* `notif_delay_before_mail`: The time to wait before emailing about a notification.
|
||||||
|
This gives the user a chance to view the message via push or an open client.
|
||||||
|
Defaults to 10 minutes.
|
||||||
|
|
||||||
|
_New in Synapse 1.99.0._
|
||||||
* `client_base_url`: Custom URL for client links within the email notifications. By default
|
* `client_base_url`: Custom URL for client links within the email notifications. By default
|
||||||
links will be based on "https://matrix.to". (This setting used to be called `riot_base_url`;
|
links will be based on "https://matrix.to". (This setting used to be called `riot_base_url`;
|
||||||
the old name is still supported for backwards-compatibility but is now deprecated.)
|
the old name is still supported for backwards-compatibility but is now deprecated.)
|
||||||
|
|
|
@ -294,6 +294,11 @@ class EmailConfig(Config):
|
||||||
self.email_riot_base_url = email_config.get(
|
self.email_riot_base_url = email_config.get(
|
||||||
"client_base_url", email_config.get("riot_base_url", None)
|
"client_base_url", email_config.get("riot_base_url", None)
|
||||||
)
|
)
|
||||||
|
# The amount of time we always wait before ever emailing about a notification
|
||||||
|
# (to give the user a chance to respond to other push or notice the window)
|
||||||
|
self.notif_delay_before_mail_ms = Config.parse_duration(
|
||||||
|
email_config.get("notif_delay_before_mail", "10m")
|
||||||
|
)
|
||||||
|
|
||||||
if self.root.account_validity.account_validity_renew_by_email_enabled:
|
if self.root.account_validity.account_validity_renew_by_email_enabled:
|
||||||
expiry_template_html = email_config.get(
|
expiry_template_html = email_config.get(
|
||||||
|
|
|
@ -30,14 +30,9 @@ if TYPE_CHECKING:
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# The amount of time we always wait before ever emailing about a notification
|
|
||||||
# (to give the user a chance to respond to other push or notice the window)
|
|
||||||
DELAY_BEFORE_MAIL_MS = 10 * 60 * 1000
|
|
||||||
|
|
||||||
# THROTTLE is the minimum time between mail notifications sent for a given room.
|
# THROTTLE is the minimum time between mail notifications sent for a given room.
|
||||||
# Each room maintains its own throttle counter, but each new mail notification
|
# Each room maintains its own throttle counter, but each new mail notification
|
||||||
# sends the pending notifications for all rooms.
|
# sends the pending notifications for all rooms.
|
||||||
THROTTLE_START_MS = 10 * 60 * 1000
|
|
||||||
THROTTLE_MAX_MS = 24 * 60 * 60 * 1000 # 24h
|
THROTTLE_MAX_MS = 24 * 60 * 60 * 1000 # 24h
|
||||||
# THROTTLE_MULTIPLIER = 6 # 10 mins, 1 hour, 6 hours, 24 hours
|
# THROTTLE_MULTIPLIER = 6 # 10 mins, 1 hour, 6 hours, 24 hours
|
||||||
THROTTLE_MULTIPLIER = 144 # 10 mins, 24 hours - i.e. jump straight to 1 day
|
THROTTLE_MULTIPLIER = 144 # 10 mins, 24 hours - i.e. jump straight to 1 day
|
||||||
|
@ -80,6 +75,8 @@ class EmailPusher(Pusher):
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise PusherConfigException("Invalid email")
|
raise PusherConfigException("Invalid email")
|
||||||
|
|
||||||
|
self._delay_before_mail_ms = self.hs.config.email.notif_delay_before_mail_ms
|
||||||
|
|
||||||
def on_started(self, should_check_for_notifs: bool) -> None:
|
def on_started(self, should_check_for_notifs: bool) -> None:
|
||||||
"""Called when this pusher has been started.
|
"""Called when this pusher has been started.
|
||||||
|
|
||||||
|
@ -180,7 +177,7 @@ class EmailPusher(Pusher):
|
||||||
received_at = push_action.received_ts
|
received_at = push_action.received_ts
|
||||||
if received_at is None:
|
if received_at is None:
|
||||||
received_at = 0
|
received_at = 0
|
||||||
notif_ready_at = received_at + DELAY_BEFORE_MAIL_MS
|
notif_ready_at = received_at + self._delay_before_mail_ms
|
||||||
|
|
||||||
room_ready_at = self.room_ready_to_notify_at(push_action.room_id)
|
room_ready_at = self.room_ready_to_notify_at(push_action.room_id)
|
||||||
|
|
||||||
|
@ -196,7 +193,7 @@ class EmailPusher(Pusher):
|
||||||
"room_id": push_action.room_id,
|
"room_id": push_action.room_id,
|
||||||
"now": self.clock.time_msec(),
|
"now": self.clock.time_msec(),
|
||||||
"received_at": received_at,
|
"received_at": received_at,
|
||||||
"delay_before_mail_ms": DELAY_BEFORE_MAIL_MS,
|
"delay_before_mail_ms": self._delay_before_mail_ms,
|
||||||
"last_sent_ts": self.get_room_last_sent_ts(push_action.room_id),
|
"last_sent_ts": self.get_room_last_sent_ts(push_action.room_id),
|
||||||
"throttle_ms": self.get_room_throttle_ms(push_action.room_id),
|
"throttle_ms": self.get_room_throttle_ms(push_action.room_id),
|
||||||
}
|
}
|
||||||
|
@ -300,10 +297,10 @@ class EmailPusher(Pusher):
|
||||||
current_throttle_ms = self.get_room_throttle_ms(room_id)
|
current_throttle_ms = self.get_room_throttle_ms(room_id)
|
||||||
|
|
||||||
if gap > THROTTLE_RESET_AFTER_MS:
|
if gap > THROTTLE_RESET_AFTER_MS:
|
||||||
new_throttle_ms = THROTTLE_START_MS
|
new_throttle_ms = self._delay_before_mail_ms
|
||||||
else:
|
else:
|
||||||
if current_throttle_ms == 0:
|
if current_throttle_ms == 0:
|
||||||
new_throttle_ms = THROTTLE_START_MS
|
new_throttle_ms = self._delay_before_mail_ms
|
||||||
else:
|
else:
|
||||||
new_throttle_ms = min(
|
new_throttle_ms = min(
|
||||||
current_throttle_ms * THROTTLE_MULTIPLIER, THROTTLE_MAX_MS
|
current_throttle_ms * THROTTLE_MULTIPLIER, THROTTLE_MAX_MS
|
||||||
|
|
Loading…
Reference in a new issue