django-codenerix-email 4.0.34__py2.py3-none-any.whl → 4.0.35__py2.py3-none-any.whl

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.
@@ -0,0 +1,248 @@
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 sys
22
+ import time
23
+
24
+ from django.core.management.base import BaseCommand
25
+ from django.conf import settings
26
+ from django.utils import timezone
27
+
28
+ from codenerix_lib.debugger import Debugger
29
+ from codenerix_email.models import EmailMessage
30
+
31
+ # Deprecation warning
32
+ if not sys.argv[0].startswith("email"):
33
+ import logging
34
+
35
+ logger = logging.getLogger("codenerix")
36
+ logger.warning(
37
+ "WARNING: 'send_email' is DEPRECATED, switch to 'emails_send' instead"
38
+ )
39
+
40
+
41
+ class Command(BaseCommand, Debugger):
42
+ # Show this when the user types help
43
+ help = "Try to send all emails in the queue"
44
+
45
+ def add_arguments(self, parser):
46
+ # Named (optional) arguments
47
+ parser.add_argument(
48
+ "-d",
49
+ action="store_true",
50
+ dest="d",
51
+ default=False,
52
+ help="Keep the command working forever as a daemon",
53
+ )
54
+
55
+ # Named (optional) arguments
56
+ parser.add_argument(
57
+ "--daemon",
58
+ action="store_true",
59
+ dest="daemon",
60
+ default=False,
61
+ help="Keep the command working forever as a daemon",
62
+ )
63
+
64
+ # Named (optional) arguments
65
+ parser.add_argument(
66
+ "-c",
67
+ action="store_true",
68
+ dest="c",
69
+ default=False,
70
+ help="Clear the sending status to all the Queue",
71
+ )
72
+
73
+ # Named (optional) arguments
74
+ parser.add_argument(
75
+ "--clear",
76
+ action="store_true",
77
+ dest="clear",
78
+ default=False,
79
+ help="Clear the sending status to all the Queue",
80
+ )
81
+ # Named (optional) arguments
82
+ parser.add_argument(
83
+ "--verbose",
84
+ action="store_true",
85
+ dest="verbose",
86
+ default=False,
87
+ help="Enable verbose mode",
88
+ )
89
+ # Named (optional) arguments
90
+ parser.add_argument(
91
+ "--now",
92
+ action="store_true",
93
+ dest="now",
94
+ default=False,
95
+ help="Send now, do not wait the retry time",
96
+ )
97
+ # Named (optional) arguments
98
+ parser.add_argument(
99
+ "--all",
100
+ action="store_true",
101
+ dest="all",
102
+ default=False,
103
+ help="Send all, do not do on buckets",
104
+ )
105
+
106
+ def handle(self, *args, **options):
107
+ # Get user configuration
108
+ daemon = bool(options["daemon"] or options["d"])
109
+ clear = bool(options["clear"] or options["c"])
110
+ bucket_size = getattr(settings, "CLIENT_EMAIL_BUCKETS", 10)
111
+ verbose = bool(options.get("verbose", False))
112
+ sendnow = bool(options.get("now", False))
113
+ doall = bool(options.get("all", False))
114
+
115
+ # Autoconfigure Debugger
116
+ self.set_name("CODENERIX-EMAIL")
117
+ self.set_debug()
118
+
119
+ # Daemon
120
+ if verbose:
121
+ if daemon:
122
+ self.debug(
123
+ "Starting command in DAEMON mode with a "
124
+ f"queue of {bucket_size} emails",
125
+ color="cyan",
126
+ )
127
+ else:
128
+ self.debug(
129
+ "Starting a queue of {} emails".format(bucket_size),
130
+ color="blue",
131
+ )
132
+
133
+ # In if requested set sending status for all the list to False
134
+ if clear:
135
+ EmailMessage.objects.filter(sending=True).update(sending=False)
136
+
137
+ # Get a bunch of emails in the queue
138
+ connection = None
139
+
140
+ # If daemon mode is requested
141
+ first = True
142
+ while first or daemon:
143
+ # Get a bucket of emails
144
+ emails = EmailMessage.objects.filter(
145
+ sent=False,
146
+ sending=False,
147
+ error=False,
148
+ )
149
+
150
+ # If we do not have to send now we have to wait for the next retry
151
+ if not sendnow:
152
+ emails = emails.filter(
153
+ next_retry__lte=timezone.now(),
154
+ )
155
+
156
+ # Order emails by priority and next retry
157
+ emails = emails.order_by("priority", "next_retry")
158
+
159
+ # Send in buckets if we are not doing them all
160
+ if not doall:
161
+ emails = emails[0 : bucket_size + 1]
162
+
163
+ # Check if there are emails to process
164
+ if emails:
165
+ # Convert to list
166
+ list_emails = [x.pk for x in emails]
167
+
168
+ # Set sending status for all the list
169
+ EmailMessage.objects.filter(pk__in=list_emails).update(
170
+ sending=True
171
+ )
172
+
173
+ # For each email
174
+ for email in emails:
175
+ if verbose:
176
+ self.debug(
177
+ "Sending to {}".format(email.eto),
178
+ color="white",
179
+ tail=False,
180
+ )
181
+
182
+ # Check if we have connection
183
+ if not connection:
184
+ if verbose:
185
+ self.debug(
186
+ " - Connecting",
187
+ color="yellow",
188
+ head=False,
189
+ tail=False,
190
+ )
191
+ connection = email.connect()
192
+
193
+ # Send the email
194
+ try:
195
+ email.send(connection, debug=False)
196
+ except Exception as e:
197
+ email.sending = False
198
+ error = "Exception: {}\n".format(e)
199
+ if email.log:
200
+ email.log += error
201
+ else:
202
+ email.log = error
203
+ email.save()
204
+ self.error(error)
205
+ if verbose:
206
+ if email.sent:
207
+ self.debug(" -> SENT", color="green", head=False)
208
+ else:
209
+ self.debug(
210
+ " -> ERROR",
211
+ color="red",
212
+ head=False,
213
+ tail=False,
214
+ )
215
+ self.debug(
216
+ " ({} retries left)".format(
217
+ getattr(
218
+ settings, "CLIENT_EMAIL_RETRIES", 10
219
+ )
220
+ - email.retries
221
+ ),
222
+ color="cyan",
223
+ head=False,
224
+ )
225
+
226
+ # Delete all that have been sent
227
+ if not getattr(settings, "CLIENT_EMAIL_HISTORY", True):
228
+ EmailMessage.objects.filter(
229
+ pk__in=list_emails, sent=True
230
+ ).delete()
231
+
232
+ elif daemon:
233
+ # Sleep for a while
234
+ try:
235
+ time.sleep(10)
236
+ except KeyboardInterrupt:
237
+ self.debug("Exited by user request!", color="green")
238
+ break
239
+
240
+ elif verbose:
241
+ # No emails to send
242
+ self.debug(
243
+ "No emails to be sent at this moment in the queue!",
244
+ color="green",
245
+ )
246
+
247
+ # This was the first time
248
+ first = False
@@ -1,3 +1,4 @@
1
+ import sys
1
2
  import re
2
3
 
3
4
  import logging
@@ -27,6 +28,15 @@ import imaplib # noqa: E402
27
28
  from imapclient import IMAPClient # noqa: E402
28
29
  from imapclient.exceptions import LoginError # noqa: E402
29
30
 
31
+ # Deprecation warning
32
+ if not sys.argv[0].startswith("email"):
33
+ import logging
34
+
35
+ logger = logging.getLogger("codenerix")
36
+ logger.warning(
37
+ "WARNING: 'recv_emails' is DEPRECATED, switch to 'emails_recv' instead"
38
+ )
39
+
30
40
 
31
41
  class Command(BaseCommand):
32
42
  help = "Fetches new emails from the configured IMAP account."
@@ -18,6 +18,7 @@
18
18
  # See the License for the specific language governing permissions and
19
19
  # limitations under the License.
20
20
 
21
+ import sys
21
22
  import time
22
23
 
23
24
  from django.core.management.base import BaseCommand
@@ -27,14 +28,21 @@ from django.utils import timezone
27
28
  from codenerix_lib.debugger import Debugger
28
29
  from codenerix_email.models import EmailMessage
29
30
 
31
+ # Deprecation warning
32
+ if not sys.argv[0].startswith("email"):
33
+ import logging
34
+
35
+ logger = logging.getLogger("codenerix")
36
+ logger.warning(
37
+ "WARNING: 'send_email' is DEPRECATED, switch to 'emails_send' instead"
38
+ )
30
39
 
31
- class Command(BaseCommand, Debugger):
32
40
 
41
+ class Command(BaseCommand, Debugger):
33
42
  # Show this when the user types help
34
43
  help = "Try to send all emails in the queue"
35
44
 
36
45
  def add_arguments(self, parser):
37
-
38
46
  # Named (optional) arguments
39
47
  parser.add_argument(
40
48
  "-d",
@@ -96,7 +104,6 @@ class Command(BaseCommand, Debugger):
96
104
  )
97
105
 
98
106
  def handle(self, *args, **options):
99
-
100
107
  # Get user configuration
101
108
  daemon = bool(options["daemon"] or options["d"])
102
109
  clear = bool(options["clear"] or options["c"])
@@ -133,7 +140,6 @@ class Command(BaseCommand, Debugger):
133
140
  # If daemon mode is requested
134
141
  first = True
135
142
  while first or daemon:
136
-
137
143
  # Get a bucket of emails
138
144
  emails = EmailMessage.objects.filter(
139
145
  sent=False,
@@ -156,7 +162,6 @@ class Command(BaseCommand, Debugger):
156
162
 
157
163
  # Check if there are emails to process
158
164
  if emails:
159
-
160
165
  # Convert to list
161
166
  list_emails = [x.pk for x in emails]
162
167
 
@@ -225,7 +230,6 @@ class Command(BaseCommand, Debugger):
225
230
  ).delete()
226
231
 
227
232
  elif daemon:
228
-
229
233
  # Sleep for a while
230
234
  try:
231
235
  time.sleep(10)
@@ -18,6 +18,7 @@
18
18
  # See the License for the specific language governing permissions and
19
19
  # limitations under the License.
20
20
 
21
+ import sys
21
22
  import json
22
23
 
23
24
  from django.core.management.base import BaseCommand
@@ -29,6 +30,15 @@ from codenerix_email.models import EmailMessage, EmailTemplate
29
30
  from codenerix_email import __version__
30
31
  from django.core.management import CommandError
31
32
 
33
+ # Deprecation warning
34
+ if not sys.argv[0].startswith("email"):
35
+ import logging
36
+
37
+ logger = logging.getLogger("codenerix")
38
+ logger.warning(
39
+ "WARNING: 'test_email' is DEPRECATED, switch to 'email_test' instead"
40
+ )
41
+
32
42
 
33
43
  class Command(BaseCommand, Debugger):
34
44
  # Show this when the user types help
@@ -164,7 +174,7 @@ Django Codenerix Email v{}
164
174
 
165
175
  if stdout:
166
176
  self.debug(
167
- f"Sending email to {name} <{email}> "
177
+ f"Sending email to <{email}> "
168
178
  f"with subject: {email_message.subject}:\n"
169
179
  f"{email_message.body}",
170
180
  color="white",
codenerix_email/models.py CHANGED
@@ -21,6 +21,7 @@
21
21
  import re
22
22
  import ssl
23
23
  import smtplib
24
+ import logging
24
25
  from uuid import uuid4
25
26
  from typing import Optional
26
27
 
@@ -55,6 +56,8 @@ BOUNCE_TYPES = (
55
56
  (BOUNCE_HARD, _("Hard")),
56
57
  )
57
58
 
59
+ logger = logging.getLogger("CodenerixEmail:EmailMessage")
60
+
58
61
 
59
62
  def ensure_header(headers, key, value, headers_keys=None):
60
63
  if headers_keys is None:
@@ -371,13 +374,10 @@ class EmailMessage(CodenerixModel):
371
374
  content_subtype=None,
372
375
  ):
373
376
  # Autoconfigure Debugger
374
- if debug:
375
- self.set_name("EmailMessage")
376
- self.set_debug()
377
377
 
378
378
  # Warn about subtype
379
379
  if content_subtype:
380
- self.warning(
380
+ logger.warning(
381
381
  _(
382
382
  "Programming ERROR: You are using content_subtype, this "
383
383
  "value has been DEPRECATED and will be remove in future "
@@ -389,13 +389,10 @@ class EmailMessage(CodenerixModel):
389
389
  if connection is None:
390
390
  # Connect
391
391
  if not silent or debug:
392
- self.warning("Not connected, connecting...")
392
+ logger.warning("Not connected, connecting...")
393
393
  connection = self.connect(legacy)
394
394
 
395
395
  if self.eto:
396
- if debug:
397
- self.set_name("EmailMessage->{}".format(self.eto))
398
-
399
396
  # Manually open the connection
400
397
  error = None
401
398
  try:
@@ -408,7 +405,8 @@ class EmailMessage(CodenerixModel):
408
405
  connection = None
409
406
  exceptiontxt = str(type(e)).split(".")[-1].split("'")[0]
410
407
  ci = getattr(self, "__connect_info", {})
411
- error = "{}: {} [HOST={}:{} TLS={}]\n".format(
408
+ error = "{}-> {}: {} [HOST={}:{} TLS={}]\n".format(
409
+ self.eto,
412
410
  exceptiontxt,
413
411
  e,
414
412
  ci.get("host", "-"),
@@ -416,7 +414,7 @@ class EmailMessage(CodenerixModel):
416
414
  ci.get("use_tls", "-"),
417
415
  )
418
416
  if not silent or debug:
419
- self.warning(error)
417
+ logger.warning(error)
420
418
  if self.log is None:
421
419
  self.log = ""
422
420
  self.log += f"{error}\n"
@@ -465,16 +463,16 @@ class EmailMessage(CodenerixModel):
465
463
  self.sending = False
466
464
  break
467
465
  except ssl.SSLError as e:
468
- error = f"SSLError: {e}\n"
466
+ error = f"{self.eto}: SSLError: {e}\n"
469
467
  if not silent or debug:
470
- self.warning(error)
468
+ logger.warning(error)
471
469
  if self.log is None:
472
470
  self.log = ""
473
471
  self.log += f"{error}\n"
474
472
  except smtplib.SMTPServerDisconnected as e:
475
- error = f"SMTPServerDisconnected: {e}\n"
473
+ error = f"{self.eto}: SMTPServerDisconnected: {e}\n"
476
474
  if not silent or debug:
477
- self.warning(error)
475
+ logger.warning(error)
478
476
  if self.log is None:
479
477
  self.log = ""
480
478
  self.log += f"{error}\n"
@@ -486,16 +484,16 @@ class EmailMessage(CodenerixModel):
486
484
  OSError,
487
485
  TimeoutError,
488
486
  ) as e:
489
- error = f"SMTPServerReconnect: {e}\n"
487
+ error = f"{self.eto}: SMTPServerReconnect: {e}\n"
490
488
  if not silent or debug:
491
- self.warning(error)
489
+ logger.warning(error)
492
490
  if self.log is None:
493
491
  self.log = ""
494
492
  self.log += f"{error}\n"
495
493
  except smtplib.SMTPException as e:
496
- error = f"SMTPException: {e}\n"
494
+ error = f"{self.eto}: SMTPException: {e}\n"
497
495
  if not silent or debug:
498
- self.warning(error)
496
+ logger.warning(error)
499
497
  if self.log is None:
500
498
  self.log = ""
501
499
  self.log += f"{error}\n"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-codenerix-email
3
- Version: 4.0.34
3
+ Version: 4.0.35
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,8 +1,8 @@
1
- codenerix_email/__init__.py,sha256=HH59UAZLhBDP5AXqL4Aq8XjZWDrU2O9cXS0bWrI2FP4,149
1
+ codenerix_email/__init__.py,sha256=aqCRJ0xgtc7E3Ql9fYCsLEo4p-pMITa-D9LKQCuhnNo,149
2
2
  codenerix_email/admin.py,sha256=w259UKFk_opGEl6PJjYHXWAHQ_8emgqmiixKT5Rid4A,1180
3
3
  codenerix_email/apps.py,sha256=WXqu1XQibDDyCvvQYt2JbTK4GIpW8BNv5DCbRJS2mmk,149
4
4
  codenerix_email/forms.py,sha256=38byLGxg1MOLAY1kAYChxYZj64tSgyfRvDcSbIOdV0I,5521
5
- codenerix_email/models.py,sha256=Yl_TyYe4PLSVYr3_3GW6JbdhItZRbiSXPhHW5ZSH06Q,25708
5
+ codenerix_email/models.py,sha256=SwjybHsg919OPgltvv6M9AHGxoql5sboluHRyv4WRjk,25700
6
6
  codenerix_email/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  codenerix_email/test_settings.py,sha256=A9WT-2MMuqvW5Mrd3lkmjrf0xJZmJl3McOEeyJug1Xc,633
8
8
  codenerix_email/urls.py,sha256=M760qDSVV3EoY9aIPdnk8DtUv5tyWO-FQWdody4KTeM,3996
@@ -827,8 +827,8 @@ codenerix_email/.mypy_cache/3.10/zoneinfo/_common.data.json,sha256=e4xbNKL_yQ5h5
827
827
  codenerix_email/.mypy_cache/3.10/zoneinfo/_common.meta.json,sha256=5K19XWobpSjKwiv7bZFZRcxsEfoh7b-FhYcmqB-2Iic,1737
828
828
  codenerix_email/.mypy_cache/3.10/zoneinfo/_tzpath.data.json,sha256=CFx7Q1XfUhhuNX69prkxyirG8rfvEDCNgEHWQigKC_A,5632
829
829
  codenerix_email/.mypy_cache/3.10/zoneinfo/_tzpath.meta.json,sha256=d1HJ_xFBI1orlZSVhH0gHWLI-dJG3zY-ZOlctOl62yU,1765
830
- codenerix_email/__pycache__/__init__.cpython-310.pyc,sha256=k1lbJmd6AzPiOFX5CRq4PIwZW8vbA-YZBbSFW9LT9ZI,313
831
- codenerix_email/__pycache__/__init__.cpython-311.pyc,sha256=AOATmmotNvoV4tjzklJFH1L5O36W1TIZp-vuczwanmA,337
830
+ codenerix_email/__pycache__/__init__.cpython-310.pyc,sha256=Sq5FOgkgx3zOEtAjCNOIlXtD0lb96C_KrdSvT2UtZA0,313
831
+ codenerix_email/__pycache__/__init__.cpython-311.pyc,sha256=zDkK7LZsQ9OHEfqGbRyF68_QZn1r1Q0V1zE4XMsDiPk,337
832
832
  codenerix_email/__pycache__/__init__.cpython-35.pyc,sha256=dl9lYAgrokJptUj3JAhiqTlX7d_CbncOxZeTc1USc88,308
833
833
  codenerix_email/__pycache__/__init__.cpython-37.pyc,sha256=5d1CeFU5DrfnwrRpvSw1bHvLN9hoHXjUA3ln3rXCDo8,306
834
834
  codenerix_email/__pycache__/__init__.cpython-39.pyc,sha256=0c6KWU_eOTlF5l9fNWv8l41b0LcfVQNUsqDvJTv2YyU,300
@@ -843,8 +843,8 @@ codenerix_email/__pycache__/forms.cpython-310.pyc,sha256=-oq5NlQGH7VkMUUMB4lXmBo
843
843
  codenerix_email/__pycache__/forms.cpython-311.pyc,sha256=zNvq_Xc_bdUsG59tq9OWUiy5hoyZ035z4E5fEovr4NE,5854
844
844
  codenerix_email/__pycache__/forms.cpython-35.pyc,sha256=z1aCJ2d8yyKJMuf5aVz0mGE6Nqi9bjU7HyDZPKxpUWc,3233
845
845
  codenerix_email/__pycache__/forms.cpython-39.pyc,sha256=NORLA0i3bmWx-mUn3wh3JtObuR7UYKZemSU6Cl5gHM8,2988
846
- codenerix_email/__pycache__/models.cpython-310.pyc,sha256=gQkwHkfPuR8Y7hDMi_6Z9a8Gq1xtJrU4UJeMVnYCDvk,18261
847
- codenerix_email/__pycache__/models.cpython-311.pyc,sha256=OJ_N_j_HTbU_apGRLDExJvjVmnH1E8cXbqFnRmMq5OM,37075
846
+ codenerix_email/__pycache__/models.cpython-310.pyc,sha256=L3f8aE3uhDm7R0tBfGFojEi-ueYkHoPIxaAaoDd-0ls,18271
847
+ codenerix_email/__pycache__/models.cpython-311.pyc,sha256=5UAVckTk83Psun4_RV_MCfG4UCcSoj435IEZ0ialb3A,37032
848
848
  codenerix_email/__pycache__/models.cpython-35.pyc,sha256=oGheSKlh8Ttc6bB-qZ1JY5_6RySM9M6GY5-GCATxfes,9481
849
849
  codenerix_email/__pycache__/models.cpython-39.pyc,sha256=ugyNNDG3k6rqsunwlcUIWADaLNvJ8snCgQwMZu9Ahac,8849
850
850
  codenerix_email/__pycache__/test_settings.cpython-310.pyc,sha256=HH5CsPxLlq7_jW4ZCGBc1KzcV4HNQcI6YTh0wcz_F0w,715
@@ -867,9 +867,12 @@ codenerix_email/management/__pycache__/__init__.cpython-311.pyc,sha256=OtPcxwWjt
867
867
  codenerix_email/management/__pycache__/__init__.cpython-35.pyc,sha256=sBoEWs6zdI0al-7t1deW9SE_Ln2RNDl2LyIiOO9gfRA,160
868
868
  codenerix_email/management/__pycache__/__init__.cpython-39.pyc,sha256=uPXklfliVd3b8pLOJQT9ZeKcqmJMrGychvt68BsPulY,168
869
869
  codenerix_email/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
870
- codenerix_email/management/commands/recv_emails.py,sha256=RsUfv5s0XMReQ1Y0LjfLp-LJ4F7nFX2z_T1-QAAWcYY,24897
871
- codenerix_email/management/commands/send_emails.py,sha256=hotzGEkuDILwKgZgHFOaSCeAZDIyoPcM7VDs3Z-5Vvg,7950
872
- codenerix_email/management/commands/test_email.py,sha256=1WtVkSuq9Doy8W2uyCTevdSrVrAdztvwWjcNJhCsIlE,5612
870
+ codenerix_email/management/commands/email_test.py,sha256=byeqE_-woEkml_PoQxwr9zp0XfCruOYAoVfJBIkQr24,5847
871
+ codenerix_email/management/commands/emails_recv.py,sha256=kzSdVPFsuy8_FH8PkEP41IU3-dD114q1NkUGVeLAzfs,25141
872
+ codenerix_email/management/commands/emails_send.py,sha256=qH87OgRH1rPMYbcm0Q6Pgyf38YGXgYhhcFP0Jvkeps8,8187
873
+ codenerix_email/management/commands/recv_emails.py,sha256=kzSdVPFsuy8_FH8PkEP41IU3-dD114q1NkUGVeLAzfs,25141
874
+ codenerix_email/management/commands/send_emails.py,sha256=qH87OgRH1rPMYbcm0Q6Pgyf38YGXgYhhcFP0Jvkeps8,8187
875
+ codenerix_email/management/commands/test_email.py,sha256=byeqE_-woEkml_PoQxwr9zp0XfCruOYAoVfJBIkQr24,5847
873
876
  codenerix_email/management/commands/.mypy_cache/.gitignore,sha256=amnaZw0RUw038PDP3HvtMLeOpkNOJPenMgi5guKdMiw,34
874
877
  codenerix_email/management/commands/.mypy_cache/CACHEDIR.TAG,sha256=8cE6_FVTWMkDOw8fMKqhd_6IvaQPS4okWYQA1UeHatw,190
875
878
  codenerix_email/management/commands/.mypy_cache/3.10/@plugins_snapshot.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
@@ -1611,8 +1614,9 @@ codenerix_email/management/commands/__pycache__/__init__.cpython-310.pyc,sha256=
1611
1614
  codenerix_email/management/commands/__pycache__/__init__.cpython-311.pyc,sha256=yiqmtIhQMYXWx7g7XT-mvQNgGu_X2ymasWvVxIqPsBE,211
1612
1615
  codenerix_email/management/commands/__pycache__/recv_emails.cpython-310.pyc,sha256=qzj8puxw6pRAz_ptltybySs2mybOwdoZ8LB7Fw8YMGc,9897
1613
1616
  codenerix_email/management/commands/__pycache__/recv_emails.cpython-311.pyc,sha256=LBMH_iYJ9A60KPpUpDzfW_RZgRRdm-aklGpdDPp36TI,20952
1614
- codenerix_email/management/commands/__pycache__/send_emails.cpython-311.pyc,sha256=xh2ontFVtLWHZOoVf1YJrNbBNPtIyV2KQEk5Bf6mY_c,6884
1617
+ codenerix_email/management/commands/__pycache__/send_emails.cpython-311.pyc,sha256=DjQ_opoCdF-yWwjsXgsNU0QRwB5lFpD57AiJkBvK6K4,7259
1615
1618
  codenerix_email/management/commands/__pycache__/test_email.cpython-310.pyc,sha256=5X7qBWFWs7AsNgTo1DyQE0zi5gtLxiFIcwdnboZIUSg,3154
1619
+ codenerix_email/management/commands/__pycache__/test_email.cpython-311.pyc,sha256=fhnAA80N3Tv4sdbJQXG7MswXmlfvl9aEZFd7Uyqsoi4,6334
1616
1620
  codenerix_email/migrations/0001_initial.py,sha256=bu1RU_FLeGKBjAXvOPHLUj2Ej9Ibns9PvE1CTVJf6qU,5816
1617
1621
  codenerix_email/migrations/0002_auto_20170502_1043.py,sha256=-zoc4RuZFXJA1Fw8ECCVqAg-PYfku3yxdtYNyXPI3LM,2369
1618
1622
  codenerix_email/migrations/0003_auto_20170921_1206.py,sha256=ncVdyZJ616vQpllGdaPbFS0n9qKfDP-TuVA5HkbPf4I,656
@@ -1680,8 +1684,8 @@ codenerix_email/migrations/__pycache__/__init__.cpython-35.pyc,sha256=2g70xiMW6o
1680
1684
  codenerix_email/migrations/__pycache__/__init__.cpython-39.pyc,sha256=qNj2NH0YvoWPnCKxkVZPsEFsbM05y7t1njMskNISdVQ,168
1681
1685
  codenerix_email/static/codenerix_email/emailmessages_rows.html,sha256=NyZpKPSHAAIywJX2ncS0H2bkqOVtMUwAdbYmkC4dKmk,2202
1682
1686
  codenerix_email/static/codenerix_email/emailreceiveds_rows.html,sha256=k7-Qe7Y9mrKRJXl69aVe5hHUvGdyrLbMoh9gkpyCG2U,1976
1683
- django_codenerix_email-4.0.34.dist-info/LICENSE,sha256=IXMIpi75XsrJt1Sznt4EftT9c_4X0C9eqK4tHhH8H48,11339
1684
- django_codenerix_email-4.0.34.dist-info/METADATA,sha256=G8OP3M3XLLHfmF6teKzcW_ITufCtR9SnPWmfOgIzjcM,2676
1685
- django_codenerix_email-4.0.34.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
1686
- django_codenerix_email-4.0.34.dist-info/top_level.txt,sha256=lljSA0iKE_UBEM5gIrGQwioC_i8Jjnp-aR1LFElENgw,16
1687
- django_codenerix_email-4.0.34.dist-info/RECORD,,
1687
+ django_codenerix_email-4.0.35.dist-info/LICENSE,sha256=IXMIpi75XsrJt1Sznt4EftT9c_4X0C9eqK4tHhH8H48,11339
1688
+ django_codenerix_email-4.0.35.dist-info/METADATA,sha256=45BPU_K_ExxR_MIzqgqDZLQhrIje8tkLuxMid-HCjZA,2676
1689
+ django_codenerix_email-4.0.35.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
1690
+ django_codenerix_email-4.0.35.dist-info/top_level.txt,sha256=lljSA0iKE_UBEM5gIrGQwioC_i8Jjnp-aR1LFElENgw,16
1691
+ django_codenerix_email-4.0.35.dist-info/RECORD,,