Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.
djangodockerhandcodedpythonself-hostedtime-trackingtimetracker
1from smtplib import SMTPResponseException
2from socket import error as socket_error
3
4from django.core.mail.backends.smtp import EmailBackend as DjangoEmailBackend
5
6from conf.utils import get_site_setting
7
8
9class EmailBackend(DjangoEmailBackend):
10 """
11 Handles emails using Site-based settings from Conf.
12 """
13
14 def __init__(self, fail_silently=False, **kwargs):
15 super().__init__(
16 host=get_site_setting("smtp_host"),
17 port=get_site_setting("smtp_port"),
18 username=get_site_setting("smtp_user"),
19 password=get_site_setting("smtp_password"),
20 use_tls=get_site_setting("use_tls"),
21 fail_silently=fail_silently,
22 **kwargs
23 )
24
25 def send_messages(self, email_messages):
26 """
27 Override the from_email property all email messages.
28 """
29 if not email_messages:
30 return
31 with self._lock:
32 for message in email_messages:
33 message.from_email = get_site_setting("smtp_from_address")
34 try:
35 super().send_messages(email_messages)
36 except (SMTPResponseException, socket_error) as e:
37 # TODO: Determine how to handle failures gracefully.
38 raise e