Source code for newsletters.emails
"""The emails defined by the newsletters package"""
import logging
from smtplib import SMTPException
from django.conf import settings
from django.core import mail
from django.core.mail import EmailMultiAlternatives
from django.template.loader import get_template
from django.utils import translation, timezone
from django.utils.timezone import make_aware
from newsletters import services
from partners.models import Partner
logger = logging.getLogger(__name__)
[docs]def send_newsletter(newsletter):
"""
Sends the newsletter as HTML and plaintext email
:param newsletter: the newsletter to be send
"""
events = None
if newsletter.date:
datetime = (
make_aware(
timezone.datetime(
year=newsletter.date.year,
month=newsletter.date.month,
day=newsletter.date.day,
)
)
if newsletter.date
else None
)
events = services.get_agenda(datetime)
from_email = settings.NEWSLETTER_FROM_ADDRESS
html_template = get_template("newsletters/email.html")
text_template = get_template("newsletters/email.txt")
main_partner = Partner.objects.filter(is_main_partner=True).first()
local_partner = Partner.objects.filter(is_local_partner=True).first()
with mail.get_connection() as connection:
for language in settings.LANGUAGES:
translation.activate(language[0])
subject = "[THALIA] " + newsletter.title
context = {
"newsletter": newsletter,
"agenda_events": events,
"main_partner": main_partner,
"local_partner": local_partner,
"lang_code": language[0],
}
html_message = html_template.render(context)
text_message = text_template.render(context)
services.write_to_file(newsletter.pk, language[0], html_message)
msg = EmailMultiAlternatives(
subject=subject,
body=text_message,
to=[f"newsletter-{language[0]}@{settings.GSUITE_DOMAIN}"],
from_email=from_email,
connection=connection,
)
msg.attach_alternative(html_message, "text/html")
try:
msg.send()
logger.info(f"Sent {language[1]} newsletter")
except SMTPException as e:
logger.error(f"Failed to send the {language[1]} " f"newsletter: {e}")
translation.deactivate()