django-codenerix-email 4.0.33__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.
- codenerix_email/__init__.py +1 -1
- codenerix_email/__pycache__/__init__.cpython-310.pyc +0 -0
- codenerix_email/__pycache__/__init__.cpython-311.pyc +0 -0
- codenerix_email/__pycache__/models.cpython-310.pyc +0 -0
- codenerix_email/__pycache__/models.cpython-311.pyc +0 -0
- codenerix_email/management/commands/__pycache__/send_emails.cpython-311.pyc +0 -0
- codenerix_email/management/commands/__pycache__/test_email.cpython-311.pyc +0 -0
- codenerix_email/management/commands/email_test.py +184 -0
- codenerix_email/management/commands/emails_recv.py +611 -0
- codenerix_email/management/commands/emails_send.py +248 -0
- codenerix_email/management/commands/recv_emails.py +10 -0
- codenerix_email/management/commands/send_emails.py +10 -6
- codenerix_email/management/commands/test_email.py +11 -1
- codenerix_email/models.py +16 -19
- {django_codenerix_email-4.0.33.dist-info → django_codenerix_email-4.0.35.dist-info}/METADATA +1 -1
- {django_codenerix_email-4.0.33.dist-info → django_codenerix_email-4.0.35.dist-info}/RECORD +19 -15
- {django_codenerix_email-4.0.33.dist-info → django_codenerix_email-4.0.35.dist-info}/LICENSE +0 -0
- {django_codenerix_email-4.0.33.dist-info → django_codenerix_email-4.0.35.dist-info}/WHEEL +0 -0
- {django_codenerix_email-4.0.33.dist-info → django_codenerix_email-4.0.35.dist-info}/top_level.txt +0 -0
|
@@ -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
|
|
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:
|
|
@@ -265,7 +268,6 @@ class EmailMessage(CodenerixModel):
|
|
|
265
268
|
headers_keys,
|
|
266
269
|
)
|
|
267
270
|
|
|
268
|
-
print(headers)
|
|
269
271
|
# Return headers
|
|
270
272
|
return headers
|
|
271
273
|
|
|
@@ -372,13 +374,10 @@ class EmailMessage(CodenerixModel):
|
|
|
372
374
|
content_subtype=None,
|
|
373
375
|
):
|
|
374
376
|
# Autoconfigure Debugger
|
|
375
|
-
if debug:
|
|
376
|
-
self.set_name("EmailMessage")
|
|
377
|
-
self.set_debug()
|
|
378
377
|
|
|
379
378
|
# Warn about subtype
|
|
380
379
|
if content_subtype:
|
|
381
|
-
|
|
380
|
+
logger.warning(
|
|
382
381
|
_(
|
|
383
382
|
"Programming ERROR: You are using content_subtype, this "
|
|
384
383
|
"value has been DEPRECATED and will be remove in future "
|
|
@@ -390,13 +389,10 @@ class EmailMessage(CodenerixModel):
|
|
|
390
389
|
if connection is None:
|
|
391
390
|
# Connect
|
|
392
391
|
if not silent or debug:
|
|
393
|
-
|
|
392
|
+
logger.warning("Not connected, connecting...")
|
|
394
393
|
connection = self.connect(legacy)
|
|
395
394
|
|
|
396
395
|
if self.eto:
|
|
397
|
-
if debug:
|
|
398
|
-
self.set_name("EmailMessage->{}".format(self.eto))
|
|
399
|
-
|
|
400
396
|
# Manually open the connection
|
|
401
397
|
error = None
|
|
402
398
|
try:
|
|
@@ -409,7 +405,8 @@ class EmailMessage(CodenerixModel):
|
|
|
409
405
|
connection = None
|
|
410
406
|
exceptiontxt = str(type(e)).split(".")[-1].split("'")[0]
|
|
411
407
|
ci = getattr(self, "__connect_info", {})
|
|
412
|
-
error = "{}: {} [HOST={}:{} TLS={}]\n".format(
|
|
408
|
+
error = "{}-> {}: {} [HOST={}:{} TLS={}]\n".format(
|
|
409
|
+
self.eto,
|
|
413
410
|
exceptiontxt,
|
|
414
411
|
e,
|
|
415
412
|
ci.get("host", "-"),
|
|
@@ -417,7 +414,7 @@ class EmailMessage(CodenerixModel):
|
|
|
417
414
|
ci.get("use_tls", "-"),
|
|
418
415
|
)
|
|
419
416
|
if not silent or debug:
|
|
420
|
-
|
|
417
|
+
logger.warning(error)
|
|
421
418
|
if self.log is None:
|
|
422
419
|
self.log = ""
|
|
423
420
|
self.log += f"{error}\n"
|
|
@@ -466,16 +463,16 @@ class EmailMessage(CodenerixModel):
|
|
|
466
463
|
self.sending = False
|
|
467
464
|
break
|
|
468
465
|
except ssl.SSLError as e:
|
|
469
|
-
error = f"SSLError: {e}\n"
|
|
466
|
+
error = f"{self.eto}: SSLError: {e}\n"
|
|
470
467
|
if not silent or debug:
|
|
471
|
-
|
|
468
|
+
logger.warning(error)
|
|
472
469
|
if self.log is None:
|
|
473
470
|
self.log = ""
|
|
474
471
|
self.log += f"{error}\n"
|
|
475
472
|
except smtplib.SMTPServerDisconnected as e:
|
|
476
|
-
error = f"SMTPServerDisconnected: {e}\n"
|
|
473
|
+
error = f"{self.eto}: SMTPServerDisconnected: {e}\n"
|
|
477
474
|
if not silent or debug:
|
|
478
|
-
|
|
475
|
+
logger.warning(error)
|
|
479
476
|
if self.log is None:
|
|
480
477
|
self.log = ""
|
|
481
478
|
self.log += f"{error}\n"
|
|
@@ -487,16 +484,16 @@ class EmailMessage(CodenerixModel):
|
|
|
487
484
|
OSError,
|
|
488
485
|
TimeoutError,
|
|
489
486
|
) as e:
|
|
490
|
-
error = f"SMTPServerReconnect: {e}\n"
|
|
487
|
+
error = f"{self.eto}: SMTPServerReconnect: {e}\n"
|
|
491
488
|
if not silent or debug:
|
|
492
|
-
|
|
489
|
+
logger.warning(error)
|
|
493
490
|
if self.log is None:
|
|
494
491
|
self.log = ""
|
|
495
492
|
self.log += f"{error}\n"
|
|
496
493
|
except smtplib.SMTPException as e:
|
|
497
|
-
error = f"SMTPException: {e}\n"
|
|
494
|
+
error = f"{self.eto}: SMTPException: {e}\n"
|
|
498
495
|
if not silent or debug:
|
|
499
|
-
|
|
496
|
+
logger.warning(error)
|
|
500
497
|
if self.log is None:
|
|
501
498
|
self.log = ""
|
|
502
499
|
self.log += f"{error}\n"
|
{django_codenerix_email-4.0.33.dist-info → django_codenerix_email-4.0.35.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-codenerix-email
|
|
3
|
-
Version: 4.0.
|
|
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=
|
|
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=
|
|
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=
|
|
831
|
-
codenerix_email/__pycache__/__init__.cpython-311.pyc,sha256=
|
|
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=
|
|
847
|
-
codenerix_email/__pycache__/models.cpython-311.pyc,sha256=
|
|
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/
|
|
871
|
-
codenerix_email/management/commands/
|
|
872
|
-
codenerix_email/management/commands/
|
|
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=
|
|
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.
|
|
1684
|
-
django_codenerix_email-4.0.
|
|
1685
|
-
django_codenerix_email-4.0.
|
|
1686
|
-
django_codenerix_email-4.0.
|
|
1687
|
-
django_codenerix_email-4.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
{django_codenerix_email-4.0.33.dist-info → django_codenerix_email-4.0.35.dist-info}/top_level.txt
RENAMED
|
File without changes
|