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.
- 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 -18
- {django_codenerix_email-4.0.34.dist-info → django_codenerix_email-4.0.35.dist-info}/METADATA +1 -1
- {django_codenerix_email-4.0.34.dist-info → django_codenerix_email-4.0.35.dist-info}/RECORD +19 -15
- {django_codenerix_email-4.0.34.dist-info → django_codenerix_email-4.0.35.dist-info}/LICENSE +0 -0
- {django_codenerix_email-4.0.34.dist-info → django_codenerix_email-4.0.35.dist-info}/WHEEL +0 -0
- {django_codenerix_email-4.0.34.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:
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
496
|
+
logger.warning(error)
|
|
499
497
|
if self.log is None:
|
|
500
498
|
self.log = ""
|
|
501
499
|
self.log += f"{error}\n"
|
{django_codenerix_email-4.0.34.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.34.dist-info → django_codenerix_email-4.0.35.dist-info}/top_level.txt
RENAMED
|
File without changes
|