~chipaca/unity-lens-video/custom-user-agent

308 by Janos Gyerik
implemented email notification on comments
1
from django.template import Context, loader
2
from django.core.mail import EmailMessage
361 by Janos Gyerik
added CustomFileEmailBackend because the alternative debugging backends by django are slow on a home pc without a mail server because of the message.message() call
3
from django.core.mail.backends.base import BaseEmailBackend
308 by Janos Gyerik
implemented email notification on comments
4
379 by Janos Gyerik
removed the bashoneliners. prefix when referencing modules internally
5
import settings as settings
308 by Janos Gyerik
implemented email notification on comments
6
7
BASEURL = 'http://bashoneliners.com'
8
9
FROM_EMAIL = settings.ADMINS[0][1]
10
BCC_EMAIL = FROM_EMAIL
11
376 by Janos Gyerik
pep8 fixes
12
308 by Janos Gyerik
implemented email notification on comments
13
def send_email(subject, message, *recipients):
14
    email = EmailMessage(
376 by Janos Gyerik
pep8 fixes
15
            subject=subject,
16
            body=message,
17
            from_email=FROM_EMAIL,
18
            to=recipients,
19
            bcc=[BCC_EMAIL],
20
            )
308 by Janos Gyerik
implemented email notification on comments
21
    email.send(fail_silently=False)
22
376 by Janos Gyerik
pep8 fixes
23
308 by Janos Gyerik
implemented email notification on comments
24
def send_email_template(subject_template, subject_context, message_template, message_context, *recipients):
25
    message_context['baseurl'] = BASEURL
26
    subject = loader.get_template(subject_template).render(Context(subject_context)).strip()
27
    message = loader.get_template(message_template).render(Context(message_context))
28
29
    return send_email(subject, message, *recipients)
30
376 by Janos Gyerik
pep8 fixes
31
315 by Janos Gyerik
completed email notifications
32
def send_oneliner_answer(question, oneliner):
33
    if question.user.email:
376 by Janos Gyerik
pep8 fixes
34
        send_email_template(
35
                'email/answer-sub.txt', {'question': question, },
36
                'email/answer-msg.txt', {
37
                    'question': question,
38
                    'oneliner': oneliner,
39
                    },
40
                question.user.email
41
                )
42
315 by Janos Gyerik
completed email notifications
43
44
def send_oneliner_alternative(oneliner, new_oneliner):
45
    if oneliner.user.email:
376 by Janos Gyerik
pep8 fixes
46
        send_email_template(
47
                'email/alternative-sub.txt', {'oneliner': oneliner, },
48
                'email/alternative-msg.txt', {
49
                    'oneliner': oneliner,
50
                    'new_oneliner': new_oneliner,
51
                    },
52
                oneliner.user.email
53
                )
54
315 by Janos Gyerik
completed email notifications
55
56
def send_oneliner_comment(oneliner, sender, comment):
57
    if oneliner.user.email:
376 by Janos Gyerik
pep8 fixes
58
        send_email_template(
59
                'email/comment-sub.txt', {'oneliner': oneliner, },
60
                'email/comment-msg.txt', {
61
                    'oneliner': oneliner,
62
                    'sender': sender,
63
                    'comment': comment,
64
                    },
65
                oneliner.user.email
66
                )
315 by Janos Gyerik
completed email notifications
67
308 by Janos Gyerik
implemented email notification on comments
68
361 by Janos Gyerik
added CustomFileEmailBackend because the alternative debugging backends by django are slow on a home pc without a mail server because of the message.message() call
69
class CustomFileEmailBackend(BaseEmailBackend):
70
    def send_messages(self, email_messages):
376 by Janos Gyerik
pep8 fixes
71
        from datetime import datetime
72
        import re
73
        if not email_messages:
74
            return
75
        try:
76
            f = open(settings.EMAIL_FILE_PATH, 'a')
77
            for message in email_messages:
78
                context = {
79
                        'subject': message.subject,
80
                        'from_email': message.from_email,
81
                        'recipients': ', '.join(message.recipients()),
82
                        'to': ', '.join(message.to),
83
                        'bcc': ', '.join(message.bcc),
84
                        'body': message.body,
85
                        'date': datetime.now(),
86
                        }
87
                log = loader.get_template('email/log.txt').render(Context(context))
88
                log = re.sub(r'\n{3,}', '\n\n', log)
89
                f.write(log)
90
                f.flush()
91
            f.close()
92
            return len(email_messages)
93
        except:
94
            return 0
361 by Janos Gyerik
added CustomFileEmailBackend because the alternative debugging backends by django are slow on a home pc without a mail server because of the message.message() call
95
96
308 by Janos Gyerik
implemented email notification on comments
97
# eof