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.
Files changed (97) hide show
  1. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/PKG-INFO +1 -1
  2. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/__init__.py +1 -1
  3. django_codenerix_email-4.0.28/codenerix_email/management/commands/__pycache__/test_email.cpython-310.pyc +0 -0
  4. django_codenerix_email-4.0.28/codenerix_email/management/commands/test_email.py +179 -0
  5. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/models.py +28 -4
  6. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/PKG-INFO +1 -1
  7. django_codenerix_email-4.0.26/codenerix_email/management/commands/__pycache__/test_email.cpython-310.pyc +0 -0
  8. django_codenerix_email-4.0.26/codenerix_email/management/commands/test_email.py +0 -59
  9. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/LICENSE +0 -0
  10. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/MANIFEST.in +0 -0
  11. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/README.rst +0 -0
  12. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/admin.py +0 -0
  13. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/apps.py +0 -0
  14. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/forms.py +0 -0
  15. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__init__.py +0 -0
  16. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__pycache__/__init__.cpython-310.pyc +0 -0
  17. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__pycache__/__init__.cpython-311.pyc +0 -0
  18. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__pycache__/__init__.cpython-35.pyc +0 -0
  19. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/__pycache__/__init__.cpython-39.pyc +0 -0
  20. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/__init__.py +0 -0
  21. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/__pycache__/__init__.cpython-310.pyc +0 -0
  22. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/__pycache__/__init__.cpython-311.pyc +0 -0
  23. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/__pycache__/send_emails.cpython-311.pyc +0 -0
  24. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/management/commands/send_emails.py +0 -0
  25. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0001_initial.py +0 -0
  26. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0002_auto_20170502_1043.py +0 -0
  27. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0003_auto_20170921_1206.py +0 -0
  28. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0004_auto_20171108_1628.py +0 -0
  29. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0005_emailmessage_retries.py +0 -0
  30. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0006_emailmessage_error.py +0 -0
  31. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0007_emailmessage_next_retry.py +0 -0
  32. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0008_auto_20171201_0928.py +0 -0
  33. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0009_emailmessage_opened_emailmessage_uuid.py +0 -0
  34. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0010_emailmessage_content_subtype_and_more.py +0 -0
  35. {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
  36. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0012_emailmessage_unsubscribe_url.py +0 -0
  37. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/0013_emailmessage_headers.py +0 -0
  38. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__init__.py +0 -0
  39. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0001_initial.cpython-310.pyc +0 -0
  40. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0001_initial.cpython-311.pyc +0 -0
  41. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0001_initial.cpython-35.pyc +0 -0
  42. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0001_initial.cpython-39.pyc +0 -0
  43. {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
  44. {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
  45. {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
  46. {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
  47. {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
  48. {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
  49. {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
  50. {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
  51. {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
  52. {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
  53. {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
  54. {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
  55. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-310.pyc +0 -0
  56. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-311.pyc +0 -0
  57. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-35.pyc +0 -0
  58. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-39.pyc +0 -0
  59. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-310.pyc +0 -0
  60. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-311.pyc +0 -0
  61. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-35.pyc +0 -0
  62. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-39.pyc +0 -0
  63. {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
  64. {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
  65. {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
  66. {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
  67. {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
  68. {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
  69. {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
  70. {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
  71. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0009_delete_emailtemplatetexten.cpython-311.pyc +0 -0
  72. {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
  73. {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
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {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
  80. {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
  81. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0013_emailmessage_headers.cpython-310.pyc +0 -0
  82. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/0013_emailmessage_headers.cpython-311.pyc +0 -0
  83. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/__init__.cpython-310.pyc +0 -0
  84. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/__init__.cpython-311.pyc +0 -0
  85. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/__init__.cpython-35.pyc +0 -0
  86. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/migrations/__pycache__/__init__.cpython-39.pyc +0 -0
  87. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/static/codenerix_email/partials/emailmessages_rows.html +0 -0
  88. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/urls.py +0 -0
  89. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/urls_frontend.py +0 -0
  90. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/codenerix_email/views.py +0 -0
  91. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/SOURCES.txt +0 -0
  92. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/dependency_links.txt +0 -0
  93. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/not-zip-safe +0 -0
  94. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/requires.txt +0 -0
  95. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/django_codenerix_email.egg-info/top_level.txt +0 -0
  96. {django_codenerix_email-4.0.26 → django_codenerix_email-4.0.28}/setup.cfg +0 -0
  97. {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.26
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>
@@ -1,4 +1,4 @@
1
- __version__ = "4.0.26"
1
+ __version__ = "4.0.28"
2
2
 
3
3
  __authors__ = [
4
4
  "Juan Miguel Taboada Godoy <juanmi@juanmitaboada.com>",
@@ -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 key not in headers:
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, "List-Unsubscribe", f"<{self.unsubscribe_url}>"
197
+ headers,
198
+ "List-Unsubscribe",
199
+ f"<{self.unsubscribe_url}>",
200
+ headers_keys,
193
201
  )
194
202
  ensure_header(
195
- headers, "List-Unsubscribe-Post", "List-Unsubscribe=One-Click"
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.26
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>
@@ -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)