django-codenerix-email 4.0.27__tar.gz → 4.0.29__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 (96) hide show
  1. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/PKG-INFO +1 -1
  2. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/__init__.py +1 -1
  3. django_codenerix_email-4.0.29/codenerix_email/management/commands/__pycache__/test_email.cpython-310.pyc +0 -0
  4. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/commands/test_email.py +19 -0
  5. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/models.py +28 -4
  6. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/views.py +17 -0
  7. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/django_codenerix_email.egg-info/PKG-INFO +1 -1
  8. django_codenerix_email-4.0.27/codenerix_email/management/commands/__pycache__/test_email.cpython-310.pyc +0 -0
  9. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/LICENSE +0 -0
  10. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/MANIFEST.in +0 -0
  11. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/README.rst +0 -0
  12. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/admin.py +0 -0
  13. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/apps.py +0 -0
  14. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/forms.py +0 -0
  15. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/__init__.py +0 -0
  16. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/__pycache__/__init__.cpython-310.pyc +0 -0
  17. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/__pycache__/__init__.cpython-311.pyc +0 -0
  18. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/__pycache__/__init__.cpython-35.pyc +0 -0
  19. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/__pycache__/__init__.cpython-39.pyc +0 -0
  20. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/commands/__init__.py +0 -0
  21. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/commands/__pycache__/__init__.cpython-310.pyc +0 -0
  22. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/commands/__pycache__/__init__.cpython-311.pyc +0 -0
  23. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/commands/__pycache__/send_emails.cpython-311.pyc +0 -0
  24. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/management/commands/send_emails.py +0 -0
  25. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0001_initial.py +0 -0
  26. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0002_auto_20170502_1043.py +0 -0
  27. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0003_auto_20170921_1206.py +0 -0
  28. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0004_auto_20171108_1628.py +0 -0
  29. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0005_emailmessage_retries.py +0 -0
  30. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0006_emailmessage_error.py +0 -0
  31. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0007_emailmessage_next_retry.py +0 -0
  32. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0008_auto_20171201_0928.py +0 -0
  33. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0009_emailmessage_opened_emailmessage_uuid.py +0 -0
  34. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0010_emailmessage_content_subtype_and_more.py +0 -0
  35. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0011_alter_emailmessage_content_subtype_and_more.py +0 -0
  36. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0012_emailmessage_unsubscribe_url.py +0 -0
  37. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/0013_emailmessage_headers.py +0 -0
  38. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__init__.py +0 -0
  39. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0001_initial.cpython-310.pyc +0 -0
  40. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0001_initial.cpython-311.pyc +0 -0
  41. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0001_initial.cpython-35.pyc +0 -0
  42. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0001_initial.cpython-39.pyc +0 -0
  43. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0002_auto_20170502_1043.cpython-310.pyc +0 -0
  44. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0002_auto_20170502_1043.cpython-311.pyc +0 -0
  45. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0002_auto_20170502_1043.cpython-35.pyc +0 -0
  46. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0002_auto_20170502_1043.cpython-39.pyc +0 -0
  47. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0003_auto_20170921_1206.cpython-310.pyc +0 -0
  48. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0003_auto_20170921_1206.cpython-311.pyc +0 -0
  49. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0003_auto_20170921_1206.cpython-35.pyc +0 -0
  50. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0003_auto_20170921_1206.cpython-39.pyc +0 -0
  51. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0004_auto_20171108_1628.cpython-310.pyc +0 -0
  52. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0004_auto_20171108_1628.cpython-311.pyc +0 -0
  53. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0004_auto_20171108_1628.cpython-35.pyc +0 -0
  54. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0004_auto_20171108_1628.cpython-39.pyc +0 -0
  55. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-310.pyc +0 -0
  56. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-311.pyc +0 -0
  57. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-35.pyc +0 -0
  58. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0005_emailmessage_retries.cpython-39.pyc +0 -0
  59. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-310.pyc +0 -0
  60. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-311.pyc +0 -0
  61. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-35.pyc +0 -0
  62. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0006_emailmessage_error.cpython-39.pyc +0 -0
  63. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0007_emailmessage_next_retry.cpython-310.pyc +0 -0
  64. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0007_emailmessage_next_retry.cpython-311.pyc +0 -0
  65. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0007_emailmessage_next_retry.cpython-35.pyc +0 -0
  66. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0007_emailmessage_next_retry.cpython-39.pyc +0 -0
  67. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0008_auto_20171201_0928.cpython-310.pyc +0 -0
  68. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0008_auto_20171201_0928.cpython-311.pyc +0 -0
  69. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0008_auto_20171201_0928.cpython-35.pyc +0 -0
  70. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0008_auto_20171201_0928.cpython-39.pyc +0 -0
  71. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0009_delete_emailtemplatetexten.cpython-311.pyc +0 -0
  72. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0009_emailmessage_opened_emailmessage_uuid.cpython-310.pyc +0 -0
  73. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0009_emailmessage_opened_emailmessage_uuid.cpython-311.pyc +0 -0
  74. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0010_emailmessage_content_subtype_and_more.cpython-310.pyc +0 -0
  75. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0010_emailmessage_content_subtype_and_more.cpython-311.pyc +0 -0
  76. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0010_emailmessage_opened_emailmessage_uuid_and_more.cpython-311.pyc +0 -0
  77. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0011_alter_emailmessage_content_subtype_and_more.cpython-310.pyc +0 -0
  78. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0011_alter_emailmessage_content_subtype_and_more.cpython-311.pyc +0 -0
  79. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0012_emailmessage_unsubscribe_url.cpython-310.pyc +0 -0
  80. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0012_emailmessage_unsubscribe_url.cpython-311.pyc +0 -0
  81. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0013_emailmessage_headers.cpython-310.pyc +0 -0
  82. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/0013_emailmessage_headers.cpython-311.pyc +0 -0
  83. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/__init__.cpython-310.pyc +0 -0
  84. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/__init__.cpython-311.pyc +0 -0
  85. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/__init__.cpython-35.pyc +0 -0
  86. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/migrations/__pycache__/__init__.cpython-39.pyc +0 -0
  87. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/static/codenerix_email/partials/emailmessages_rows.html +0 -0
  88. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/urls.py +0 -0
  89. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/codenerix_email/urls_frontend.py +0 -0
  90. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/django_codenerix_email.egg-info/SOURCES.txt +0 -0
  91. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/django_codenerix_email.egg-info/dependency_links.txt +0 -0
  92. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/django_codenerix_email.egg-info/not-zip-safe +0 -0
  93. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/django_codenerix_email.egg-info/requires.txt +0 -0
  94. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/django_codenerix_email.egg-info/top_level.txt +0 -0
  95. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/setup.cfg +0 -0
  96. {django_codenerix_email-4.0.27 → django_codenerix_email-4.0.29}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django_codenerix_email
3
- Version: 4.0.27
3
+ Version: 4.0.29
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.27"
1
+ __version__ = "4.0.29"
2
2
 
3
3
  __authors__ = [
4
4
  "Juan Miguel Taboada Godoy <juanmi@juanmitaboada.com>",
@@ -22,6 +22,7 @@ import json
22
22
 
23
23
  from django.core.management.base import BaseCommand
24
24
  from django.conf import settings
25
+ from django.utils import timezone
25
26
 
26
27
  from codenerix_lib.debugger import Debugger
27
28
  from codenerix_email.models import EmailMessage, EmailTemplate # type: ignore
@@ -131,6 +132,15 @@ Django Codenerix Email v{}
131
132
  email_message.efrom = settings.DEFAULT_FROM_EMAIL
132
133
  email_message.eto = email
133
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
+
134
144
  if stdout:
135
145
  self.debug(
136
146
  f"Sending email to {name} <{email}> "
@@ -148,6 +158,15 @@ Django Codenerix Email v{}
148
158
  email_message.efrom = settings.DEFAULT_FROM_EMAIL
149
159
  email_message.eto = email
150
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
+
151
170
  if stdout:
152
171
  self.debug(
153
172
  f"Sending email to {name} <{email}> "
@@ -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):
@@ -115,6 +115,23 @@ class EmailTemplateList(GenList):
115
115
  "bread": [_("Emails"), _("Email Template")],
116
116
  }
117
117
 
118
+ def __fields__(self, info):
119
+ fields = []
120
+ fields.append(("pk", _("PK"), 100))
121
+ fields.append(("cid", _("CID"), 100))
122
+ fields.append(("efrom", _("From"), 100))
123
+ fields.append(
124
+ (
125
+ f"{self.language}__subject",
126
+ _("Subject"),
127
+ 100,
128
+ None,
129
+ "shorttext:150",
130
+ )
131
+ )
132
+ fields.append(("content_subtype", _("Content Subtype"), 100))
133
+ return fields
134
+
118
135
 
119
136
  class EmailTemplateCreate(MultiForm, GenCreate):
120
137
  model = EmailTemplate
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-codenerix-email
3
- Version: 4.0.27
3
+ Version: 4.0.29
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>