Coverage for website/newsletters/emails.py: 79.17%

22 statements  

« prev     ^ index     » next       coverage.py v7.6.7, created at 2025-08-14 10:31 +0000

1import logging 

2from smtplib import SMTPException 

3 

4from django.conf import settings 

5from django.utils import timezone 

6from django.utils.timezone import make_aware 

7 

8from newsletters import services 

9from partners.models import Partner 

10from utils.snippets import send_email 

11 

12logger = logging.getLogger(__name__) 

13 

14 

15def send_newsletter(newsletter): 

16 """Send the newsletter as HTML and plaintext email.""" 

17 events = None 

18 if newsletter.date: 18 ↛ 19line 18 didn't jump to line 19

19 datetime = ( 

20 make_aware( 

21 timezone.datetime( 

22 year=newsletter.date.year, 

23 month=newsletter.date.month, 

24 day=newsletter.date.day, 

25 ) 

26 ) 

27 if newsletter.date 

28 else None 

29 ) 

30 events = services.get_agenda(datetime) 

31 

32 main_partner = Partner.objects.filter(is_main_partner=True).first() 

33 local_partners = services.split_local_partners() 

34 

35 context = { 

36 "newsletter": newsletter, 

37 "agenda_events": events, 

38 "main_partner": main_partner, 

39 "local_partners": local_partners, 

40 } 

41 

42 try: 

43 send_email( 

44 to=[f"newsletter@{settings.GSUITE_DOMAIN}"], 

45 subject=newsletter.title, 

46 txt_template="newsletters/email.txt", 

47 html_template="newsletters/email.html", 

48 from_email=settings.NEWSLETTER_FROM_ADDRESS, 

49 context=context, 

50 ) 

51 

52 logger.info("Sent newsletter") 

53 except SMTPException: 

54 logger.exception("Failed to send the newsletter")