from django.core import mail from django.core.mail import EmailMessage from django.conf import settings import os NOT_SENT, SENT, PARTLY_SENT = 0, 1, 2 def send(subject, content, sender, recipients, message_id=None, reply_to=None, attachments=None): failed, succeeded = False, False if type(recipients) != list: recipients = [recipients] if reply_to is not None: kwargs = {"reply_to": reply_to} else: kwargs = {} if message_id is not None: headers = {'Message-ID': message_id} else: headers = {} # construct mails mails = [] for recipient in set(recipients): email = EmailMessage(subject, content, sender, [recipient], headers=headers, **kwargs) if attachments is not None: for attach in attachments: email.attach_file(attach) mails.append(email) try: # connect to smtp server connection = mail.get_connection() # send all mails with one connection connection.send_messages(mails) except Exception as e: print("Error when sending mail:", e) failed = True else: succeeded = True return NOT_SENT if failed and not succeeded else SENT if not failed\ and succeeded else PARTLY_SENT def get_content(content, registration_complete=True): url = prepend_base_url("/newsletter/unsubscribe") prepend = settings.PREPEND_INCOMPLETE_REGISTRATION_TEXT footer = settings.MAIL_FOOTER.format(link=url) text = "{prepend}{content}{footer}".format(prepend="" if registration_complete else prepend, content=content, footer=footer) return text def get_unsubscribe_link(member): key = member.generate_key() return prepend_base_url("/newsletter/unsubscribe?key={}".format(key)) def get_echo_link(member): key = member.generate_echo_key() return prepend_base_url("/members/echo?key={}".format(key)) def get_registration_link(waiter): key = waiter.generate_registration_key() return prepend_base_url("/members/registration?key={}".format(key)) def get_wait_confirmation_link(waiter): key = waiter.generate_wait_confirmation_key() return prepend_base_url("/members/waitinglist/confirm?key={}".format(key)) def get_mail_confirmation_link(key): return prepend_base_url("/members/mail/confirm?key={}".format(key)) def prepend_base_url(absolutelink): return "{protocol}://{base}{link}".format(protocol=settings.PROTOCOL, base=settings.BASE_URL, link=absolutelink)