django-codenerix-email 4.0.26__tar.gz → 4.0.28__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/PKG-INFO +1 -1
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/__init__.py +1 -1
- django_codenerix_email-4.0.28/codenerix_email/management/commands/__pycache__/test_email.cpython-310.pyc +0 -0
- django_codenerix_email-4.0.28/codenerix_email/management/commands/test_email.py +179 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/models.py +28 -4
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/PKG-INFO +1 -1
- django_codenerix_email-4.0.26/codenerix_email/management/commands/__pycache__/test_email.cpython-310.pyc +0 -0
- django_codenerix_email-4.0.26/codenerix_email/management/commands/test_email.py +0 -59
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/LICENSE +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/MANIFEST.in +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/README.rst +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/admin.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/apps.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/forms.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__init__.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__pycache__/__init__.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__pycache__/__init__.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__pycache__/__init__.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__pycache__/__init__.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/__init__.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/__pycache__/__init__.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/__pycache__/__init__.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/__pycache__/send_emails.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/send_emails.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0001_initial.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0002_auto_20170502_1043.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0003_auto_20170921_1206.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0004_auto_20171108_1628.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0005_emailmessage_retries.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0006_emailmessage_error.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0007_emailmessage_next_retry.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0008_auto_20171201_0928.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0009_emailmessage_opened_emailmessage_uuid.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0010_emailmessage_content_subtype_and_more.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0011_alter_emailmessage_content_subtype_and_more.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0012_emailmessage_unsubscribe_url.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0013_emailmessage_headers.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__init__.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0001_initial.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0001_initial.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0001_initial.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0001_initial.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0002_auto_20170502_1043.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0002_auto_20170502_1043.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0002_auto_20170502_1043.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0002_auto_20170502_1043.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0003_auto_20170921_1206.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0003_auto_20170921_1206.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0003_auto_20170921_1206.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0003_auto_20170921_1206.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0004_auto_20171108_1628.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0004_auto_20171108_1628.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0004_auto_20171108_1628.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0004_auto_20171108_1628.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0007_emailmessage_next_retry.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0007_emailmessage_next_retry.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0007_emailmessage_next_retry.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0007_emailmessage_next_retry.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0008_auto_20171201_0928.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0008_auto_20171201_0928.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0008_auto_20171201_0928.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0008_auto_20171201_0928.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0009_delete_emailtemplatetexten.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0009_emailmessage_opened_emailmessage_uuid.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0009_emailmessage_opened_emailmessage_uuid.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0010_emailmessage_content_subtype_and_more.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0010_emailmessage_content_subtype_and_more.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0010_emailmessage_opened_emailmessage_uuid_and_more.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0011_alter_emailmessage_content_subtype_and_more.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0011_alter_emailmessage_content_subtype_and_more.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0012_emailmessage_unsubscribe_url.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0012_emailmessage_unsubscribe_url.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0013_emailmessage_headers.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0013_emailmessage_headers.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/__init__.cpython-310.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/__init__.cpython-311.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/__init__.cpython-35.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/__init__.cpython-39.pyc +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/static/codenerix_email/partials/emailmessages_rows.html +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/urls.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/urls_frontend.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/views.py +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/SOURCES.txt +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/dependency_links.txt +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/not-zip-safe +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/requires.txt +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/top_level.txt +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/setup.cfg +0 -0
- {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django_codenerix_email
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.28
|
|
4
4
|
Summary: Codenerix Email is a module that enables CODENERIX to set send emails in a general manner.
|
|
5
5
|
Home-page: https://github.com/codenerix/django-codenerix-email
|
|
6
6
|
Author: Juan Miguel Taboada Godoy <juanmi@juanmitaboada.com>, Juan Soler Ruiz <soleronline@gmail.com>
|
|
Binary file
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# django-codenerix-email
|
|
4
|
+
#
|
|
5
|
+
# Codenerix GNU
|
|
6
|
+
#
|
|
7
|
+
# Project URL : http://www.codenerix.com
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
|
|
21
|
+
import json
|
|
22
|
+
|
|
23
|
+
from django.core.management.base import BaseCommand
|
|
24
|
+
from django.conf import settings
|
|
25
|
+
from django.utils import timezone
|
|
26
|
+
|
|
27
|
+
from codenerix_lib.debugger import Debugger
|
|
28
|
+
from codenerix_email.models import EmailMessage, EmailTemplate # type: ignore
|
|
29
|
+
from codenerix_email import __version__
|
|
30
|
+
from django.core.management import CommandError
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Command(BaseCommand, Debugger):
|
|
34
|
+
|
|
35
|
+
# Show this when the user types help
|
|
36
|
+
help = "Test"
|
|
37
|
+
|
|
38
|
+
def add_arguments(self, parser):
|
|
39
|
+
parser.add_argument(
|
|
40
|
+
"--email",
|
|
41
|
+
type=str,
|
|
42
|
+
help="Email",
|
|
43
|
+
default=None,
|
|
44
|
+
)
|
|
45
|
+
parser.add_argument(
|
|
46
|
+
"--template",
|
|
47
|
+
type=str,
|
|
48
|
+
help="Template CID",
|
|
49
|
+
default=None,
|
|
50
|
+
)
|
|
51
|
+
parser.add_argument(
|
|
52
|
+
"--context",
|
|
53
|
+
type=str,
|
|
54
|
+
help="Context as JSON",
|
|
55
|
+
default="{}",
|
|
56
|
+
)
|
|
57
|
+
parser.add_argument(
|
|
58
|
+
"--language",
|
|
59
|
+
type=str,
|
|
60
|
+
help="Language",
|
|
61
|
+
default=None,
|
|
62
|
+
)
|
|
63
|
+
parser.add_argument(
|
|
64
|
+
"--stdout",
|
|
65
|
+
action="store_true",
|
|
66
|
+
help="Print to stdout",
|
|
67
|
+
default=False,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
def handle(self, *args, **options):
|
|
71
|
+
|
|
72
|
+
# Autoconfigure Debugger
|
|
73
|
+
self.set_name("CODENERIX-EMAIL")
|
|
74
|
+
self.set_debug()
|
|
75
|
+
|
|
76
|
+
# Get arguments
|
|
77
|
+
email = options["email"]
|
|
78
|
+
template = options["template"]
|
|
79
|
+
context_str = options["context"]
|
|
80
|
+
language = options["language"]
|
|
81
|
+
stdout = options["stdout"]
|
|
82
|
+
|
|
83
|
+
# Read context
|
|
84
|
+
try:
|
|
85
|
+
context = json.loads(context_str)
|
|
86
|
+
except json.JSONDecodeError:
|
|
87
|
+
raise CommandError(
|
|
88
|
+
"Context is not a valid JSON string: {}".format(context_str)
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# If no template is provided, use the default one
|
|
92
|
+
if template is None:
|
|
93
|
+
|
|
94
|
+
# Get the default template
|
|
95
|
+
message = """Hello,
|
|
96
|
+
|
|
97
|
+
This email has been sent using Django Codenerix Email.
|
|
98
|
+
|
|
99
|
+
Best regards, Codenerix Team
|
|
100
|
+
|
|
101
|
+
--
|
|
102
|
+
Django Codenerix Email v{}
|
|
103
|
+
""".format(
|
|
104
|
+
__version__
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
def email_message_factory(context, language):
|
|
108
|
+
email_message = EmailMessage()
|
|
109
|
+
email_message.subject = "[Codenerix Email] Test"
|
|
110
|
+
email_message.body = message
|
|
111
|
+
return email_message
|
|
112
|
+
|
|
113
|
+
else:
|
|
114
|
+
# Get the template
|
|
115
|
+
try:
|
|
116
|
+
template = EmailTemplate.objects.get(cid=template)
|
|
117
|
+
except EmailTemplate.DoesNotExist:
|
|
118
|
+
raise CommandError(
|
|
119
|
+
"Template with CID {} does not exist.".format(template)
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
# Render the template
|
|
123
|
+
def email_message_factory(context, language):
|
|
124
|
+
return template.get_email(context, language)
|
|
125
|
+
|
|
126
|
+
# If no email is provided, send to all admins
|
|
127
|
+
if email is None:
|
|
128
|
+
|
|
129
|
+
# Send email to all admins
|
|
130
|
+
for name, email in settings.ADMINS:
|
|
131
|
+
email_message = email_message_factory(context, language)
|
|
132
|
+
email_message.efrom = settings.DEFAULT_FROM_EMAIL
|
|
133
|
+
email_message.eto = email
|
|
134
|
+
|
|
135
|
+
# Prepare message ID info
|
|
136
|
+
ecid = email_message.uuid.hex
|
|
137
|
+
edomain = settings.EMAIL_FROM.split("@")[-1]
|
|
138
|
+
ets = int(timezone.now().timestamp())
|
|
139
|
+
email_message.headers = {
|
|
140
|
+
"Message-ID": f"<{ecid}-{ets}@{edomain}>",
|
|
141
|
+
"X-Codenerix-Email": "Test",
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if stdout:
|
|
145
|
+
self.debug(
|
|
146
|
+
f"Sending email to {name} <{email}> "
|
|
147
|
+
f"with subject: {email_message.subject}:\n"
|
|
148
|
+
f"{email_message.body}",
|
|
149
|
+
color="white",
|
|
150
|
+
)
|
|
151
|
+
else:
|
|
152
|
+
email_message.save()
|
|
153
|
+
email_message.send(legacy=False, silent=False)
|
|
154
|
+
else:
|
|
155
|
+
|
|
156
|
+
# Send email to the specified address
|
|
157
|
+
email_message = email_message_factory(context, language)
|
|
158
|
+
email_message.efrom = settings.DEFAULT_FROM_EMAIL
|
|
159
|
+
email_message.eto = email
|
|
160
|
+
|
|
161
|
+
# Prepare message ID info
|
|
162
|
+
ecid = email_message.uuid.hex
|
|
163
|
+
edomain = settings.EMAIL_FROM.split("@")[-1]
|
|
164
|
+
ets = int(timezone.now().timestamp())
|
|
165
|
+
email_message.headers = {
|
|
166
|
+
"Message-ID": f"<{ecid}-{ets}@{edomain}>",
|
|
167
|
+
"X-Codenerix-Email": "Test",
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if stdout:
|
|
171
|
+
self.debug(
|
|
172
|
+
f"Sending email to {name} <{email}> "
|
|
173
|
+
f"with subject: {email_message.subject}:\n"
|
|
174
|
+
f"{email_message.body}",
|
|
175
|
+
color="white",
|
|
176
|
+
)
|
|
177
|
+
else:
|
|
178
|
+
email_message.save()
|
|
179
|
+
email_message.send(legacy=False, silent=False)
|
|
@@ -49,8 +49,10 @@ CONTENT_SUBTYPES = (
|
|
|
49
49
|
)
|
|
50
50
|
|
|
51
51
|
|
|
52
|
-
def ensure_header(headers, key, value):
|
|
53
|
-
if
|
|
52
|
+
def ensure_header(headers, key, value, headers_keys=None):
|
|
53
|
+
if headers_keys is None:
|
|
54
|
+
headers_keys = [k.lower() for k in headers.keys()]
|
|
55
|
+
if key.lower() not in headers_keys:
|
|
54
56
|
headers[key] = value
|
|
55
57
|
return headers
|
|
56
58
|
|
|
@@ -186,13 +188,34 @@ class EmailMessage(CodenerixModel, Debugger):
|
|
|
186
188
|
# Get headers
|
|
187
189
|
headers = self.headers or {}
|
|
188
190
|
|
|
191
|
+
# Header keys
|
|
192
|
+
headers_keys = [k.lower() for k in headers.keys()]
|
|
193
|
+
|
|
189
194
|
# Ensure unsubscribe headers
|
|
190
195
|
if self.unsubscribe_url:
|
|
191
196
|
ensure_header(
|
|
192
|
-
headers,
|
|
197
|
+
headers,
|
|
198
|
+
"List-Unsubscribe",
|
|
199
|
+
f"<{self.unsubscribe_url}>",
|
|
200
|
+
headers_keys,
|
|
193
201
|
)
|
|
194
202
|
ensure_header(
|
|
195
|
-
headers,
|
|
203
|
+
headers,
|
|
204
|
+
"List-Unsubscribe-Post",
|
|
205
|
+
"List-Unsubscribe=One-Click",
|
|
206
|
+
headers_keys,
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
# Prepare message ID info
|
|
210
|
+
if "Message-ID".lower() not in headers_keys:
|
|
211
|
+
ecid = self.uuid.hex
|
|
212
|
+
edomain = settings.EMAIL_FROM.split("@")[-1]
|
|
213
|
+
ets = int(timezone.now().timestamp())
|
|
214
|
+
ensure_header(
|
|
215
|
+
headers,
|
|
216
|
+
"Message-ID",
|
|
217
|
+
f"<{ecid}-{ets}@{edomain}>",
|
|
218
|
+
headers_keys,
|
|
196
219
|
)
|
|
197
220
|
|
|
198
221
|
# Return headers
|
|
@@ -552,6 +575,7 @@ class EmailTemplate(CodenerixModel):
|
|
|
552
575
|
e.body = Template(getattr(self, lang).body).render(Context(context))
|
|
553
576
|
e.efrom = Template(self.efrom).render(Context(context))
|
|
554
577
|
e.content_subtype = self.content_subtype
|
|
578
|
+
|
|
555
579
|
return e
|
|
556
580
|
|
|
557
581
|
def clean(self):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-codenerix-email
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.28
|
|
4
4
|
Summary: Codenerix Email is a module that enables CODENERIX to set send emails in a general manner.
|
|
5
5
|
Home-page: https://github.com/codenerix/django-codenerix-email
|
|
6
6
|
Author: Juan Miguel Taboada Godoy <juanmi@juanmitaboada.com>, Juan Soler Ruiz <soleronline@gmail.com>
|
|
Binary file
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
#
|
|
3
|
-
# django-codenerix-email
|
|
4
|
-
#
|
|
5
|
-
# Codenerix GNU
|
|
6
|
-
#
|
|
7
|
-
# Project URL : http://www.codenerix.com
|
|
8
|
-
#
|
|
9
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
-
# you may not use this file except in compliance with the License.
|
|
11
|
-
# You may obtain a copy of the License at
|
|
12
|
-
#
|
|
13
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
-
#
|
|
15
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
-
# See the License for the specific language governing permissions and
|
|
19
|
-
# limitations under the License.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
from django.core.management.base import BaseCommand
|
|
23
|
-
from django.conf import settings
|
|
24
|
-
|
|
25
|
-
from codenerix_lib.debugger import Debugger
|
|
26
|
-
from codenerix_email.models import EmailMessage
|
|
27
|
-
from codenerix_email import __version__
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
class Command(BaseCommand, Debugger):
|
|
31
|
-
|
|
32
|
-
# Show this when the user types help
|
|
33
|
-
help = "Test"
|
|
34
|
-
|
|
35
|
-
def handle(self, *args, **options):
|
|
36
|
-
|
|
37
|
-
# Autoconfigure Debugger
|
|
38
|
-
self.set_name("CODENERIX-EMAIL")
|
|
39
|
-
self.set_debug()
|
|
40
|
-
|
|
41
|
-
message = """Hello,
|
|
42
|
-
|
|
43
|
-
this email has been sent using Django Codenerix Email.
|
|
44
|
-
|
|
45
|
-
Best regards, Codenerix Team
|
|
46
|
-
|
|
47
|
-
--
|
|
48
|
-
Django Codenerix Email v{}""".format(
|
|
49
|
-
__version__
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
for name, email in settings.ADMINS:
|
|
53
|
-
email_message = EmailMessage()
|
|
54
|
-
email_message.efrom = settings.DEFAULT_FROM_EMAIL
|
|
55
|
-
email_message.eto = email
|
|
56
|
-
email_message.subject = "[Codenerix Email] Test"
|
|
57
|
-
email_message.body = message
|
|
58
|
-
email_message.save()
|
|
59
|
-
email_message.send(legacy=False, silent=False)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/urls_frontend.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|