You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kompass/jdav_web/mailer/mailutils.py

92 lines
2.8 KiB
Python

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, cc=None):
failed, succeeded = False, False
if type(recipients) != list:
recipients = [recipients]
if not cc:
cc = []
elif type(cc) != list:
cc = [cc]
if reply_to is not None:
kwargs = {"reply_to": reply_to}
else:
kwargs = {}
url = prepend_base_url("/newsletter/unsubscribe")
headers = {'List-Unsubscribe': '<{unsubscribe_url}>'.format(unsubscribe_url=url)}
if message_id is not None:
headers['Message-ID'] = message_id
# construct mails
mails = []
for recipient in set(recipients):
email = EmailMessage(subject, content, sender, [recipient], cc=cc,
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
text = "{prepend}{content}".format(prepend="" if registration_complete else prepend,
content=content)
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(key):
return prepend_base_url("/members/registration?key={}".format(key))
def get_invitation_reject_link(key):
return prepend_base_url("/members/waitinglist/invitation/reject?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 get_invite_as_user_key(key):
return prepend_base_url("/login/register?key={}".format(key))
def prepend_base_url(absolutelink):
return "{protocol}://{base}{link}".format(protocol=settings.PROTOCOL, base=settings.BASE_URL, link=absolutelink)