django-codenerix-email 4.0.41__py2.py3-none-any.whl → 4.0.43__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/management/commands/emails_recv.py +28 -23
- {django_codenerix_email-4.0.41.dist-info → django_codenerix_email-4.0.43.dist-info}/METADATA +1 -1
- {django_codenerix_email-4.0.41.dist-info → django_codenerix_email-4.0.43.dist-info}/RECORD +9 -9
- {django_codenerix_email-4.0.41.dist-info → django_codenerix_email-4.0.43.dist-info}/LICENSE +0 -0
- {django_codenerix_email-4.0.41.dist-info → django_codenerix_email-4.0.43.dist-info}/WHEEL +0 -0
- {django_codenerix_email-4.0.41.dist-info → django_codenerix_email-4.0.43.dist-info}/top_level.txt +0 -0
codenerix_email/__init__.py
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -353,7 +353,7 @@ class Command(BaseCommand):
|
|
|
353
353
|
# Decode subject if it's bytes
|
|
354
354
|
if isinstance(subject, bytes):
|
|
355
355
|
charset = self.validate_encoding(encoding)
|
|
356
|
-
subject = subject.decode(charset, "ignore")
|
|
356
|
+
subject = subject.decode(charset, errors="ignore")
|
|
357
357
|
|
|
358
358
|
# Extract other headers
|
|
359
359
|
efrom = msg.get("From")
|
|
@@ -382,27 +382,20 @@ class Command(BaseCommand):
|
|
|
382
382
|
)
|
|
383
383
|
body_plain = part.get_payload(
|
|
384
384
|
decode=True
|
|
385
|
-
).decode(
|
|
386
|
-
charset,
|
|
387
|
-
"ignore",
|
|
388
|
-
)
|
|
385
|
+
).decode(charset, errors="ignore")
|
|
389
386
|
elif content_type == "text/html" and not body_html:
|
|
390
387
|
charset = self.validate_encoding(
|
|
391
388
|
part.get_content_charset()
|
|
392
389
|
)
|
|
393
390
|
body_html = part.get_payload(
|
|
394
391
|
decode=True
|
|
395
|
-
).decode(
|
|
396
|
-
charset,
|
|
397
|
-
"ignore",
|
|
398
|
-
)
|
|
392
|
+
).decode(charset, errors="ignore")
|
|
399
393
|
else:
|
|
400
394
|
charset = self.validate_encoding(
|
|
401
395
|
msg.get_content_charset()
|
|
402
396
|
)
|
|
403
397
|
body_plain = msg.get_payload(decode=True).decode(
|
|
404
|
-
charset,
|
|
405
|
-
"ignore",
|
|
398
|
+
charset, errors="ignore"
|
|
406
399
|
)
|
|
407
400
|
|
|
408
401
|
# Logic to associate replies/bounces with sent emails
|
|
@@ -452,7 +445,7 @@ class Command(BaseCommand):
|
|
|
452
445
|
charset = self.validate_encoding(encoding)
|
|
453
446
|
if isinstance(decoded_value, bytes):
|
|
454
447
|
decoded_value = decoded_value.decode(
|
|
455
|
-
charset, "ignore"
|
|
448
|
+
charset, errors="ignore"
|
|
456
449
|
)
|
|
457
450
|
headers[header] = decoded_value
|
|
458
451
|
|
|
@@ -598,7 +591,7 @@ class Command(BaseCommand):
|
|
|
598
591
|
"""
|
|
599
592
|
|
|
600
593
|
# Method 1: Search in main headers (for direct replies)
|
|
601
|
-
tracking_id = msg.get("X-Codenerix-Tracking-ID", None
|
|
594
|
+
tracking_id = str(msg.get("X-Codenerix-Tracking-ID", "")) or None
|
|
602
595
|
|
|
603
596
|
# Method 2: Search in attached parts (for bounces and forwards)
|
|
604
597
|
if not tracking_id:
|
|
@@ -621,8 +614,13 @@ class Command(BaseCommand):
|
|
|
621
614
|
):
|
|
622
615
|
original_msg = original_msg_payload[0]
|
|
623
616
|
if isinstance(original_msg, Message):
|
|
624
|
-
tracking_id =
|
|
625
|
-
|
|
617
|
+
tracking_id = (
|
|
618
|
+
str(
|
|
619
|
+
original_msg.get(
|
|
620
|
+
"X-Codenerix-Tracking-ID", ""
|
|
621
|
+
)
|
|
622
|
+
)
|
|
623
|
+
or None
|
|
626
624
|
)
|
|
627
625
|
|
|
628
626
|
elif content_type == "text/rfc822-headers":
|
|
@@ -639,8 +637,13 @@ class Command(BaseCommand):
|
|
|
639
637
|
|
|
640
638
|
# Parse headers text into a Message object
|
|
641
639
|
headers_msg = HeaderParser().parsestr(headers_text)
|
|
642
|
-
tracking_id =
|
|
643
|
-
|
|
640
|
+
tracking_id = (
|
|
641
|
+
str(
|
|
642
|
+
headers_msg.get(
|
|
643
|
+
"X-Codenerix-Tracking-ID", ""
|
|
644
|
+
)
|
|
645
|
+
)
|
|
646
|
+
or None
|
|
644
647
|
)
|
|
645
648
|
|
|
646
649
|
# Method 3: Search in the body text (fallback)
|
|
@@ -723,8 +726,10 @@ class Command(BaseCommand):
|
|
|
723
726
|
status_headers = payload[0]
|
|
724
727
|
if isinstance(status_headers, Message):
|
|
725
728
|
# Extract Action and Status headers
|
|
726
|
-
action =
|
|
727
|
-
|
|
729
|
+
action = str(
|
|
730
|
+
status_headers.get("Action", "")
|
|
731
|
+
).lower()
|
|
732
|
+
status_code = str(status_headers.get("Status", ""))
|
|
728
733
|
|
|
729
734
|
# Check if action indicates failure
|
|
730
735
|
if action == "failed":
|
|
@@ -754,13 +759,13 @@ class Command(BaseCommand):
|
|
|
754
759
|
|
|
755
760
|
else:
|
|
756
761
|
# Check for Auto-Submitted header
|
|
757
|
-
if msg.get("Auto-Submitted", "").lower() in (
|
|
762
|
+
if str(msg.get("Auto-Submitted", "")).lower() in (
|
|
758
763
|
"auto-replied",
|
|
759
764
|
"auto-generated",
|
|
760
765
|
):
|
|
761
766
|
# It could be a bounce, but also an "Out of Office",
|
|
762
767
|
# so we combine it with a keyword search.
|
|
763
|
-
subject = msg.get("Subject", "").lower()
|
|
768
|
+
subject = str(msg.get("Subject", "")).lower()
|
|
764
769
|
bounce_keywords = [
|
|
765
770
|
"undeliverable",
|
|
766
771
|
"delivery failed",
|
|
@@ -777,8 +782,8 @@ class Command(BaseCommand):
|
|
|
777
782
|
if not bounce_type:
|
|
778
783
|
# We look for common bounce keywords in the From or Subject headers
|
|
779
784
|
# We avoid false positives by requiring specific keywords.
|
|
780
|
-
from_header = msg.get("From", "").lower()
|
|
781
|
-
subject_header = msg.get("Subject", "").lower()
|
|
785
|
+
from_header = str(msg.get("From", "")).lower()
|
|
786
|
+
subject_header = str(msg.get("Subject", "")).lower()
|
|
782
787
|
|
|
783
788
|
if "mailer-daemon@" in from_header or "postmaster@" in from_header:
|
|
784
789
|
# Common bounce sender addresses
|
{django_codenerix_email-4.0.41.dist-info → django_codenerix_email-4.0.43.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.43
|
|
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
|
-
codenerix_email/__init__.py,sha256=
|
|
1
|
+
codenerix_email/__init__.py,sha256=efAjcy3K16vkCTUwTZBXZJCKyPWRTdktfA2rHlSSY5A,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=P5w-ebxLR1V10RFDqO_R5vvZV-vY6SLTzVb1OLdFZE0,5710
|
|
@@ -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=UfkLIR72bavcAAq4Nvzaw3MNV8AZ_TOygeWPiF1bEEA,313
|
|
831
|
+
codenerix_email/__pycache__/__init__.cpython-311.pyc,sha256=6VfDHH5eKl_yjjxj0W72_x8VOOCPxsaQW2ESOP9yHxU,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
|
|
@@ -868,7 +868,7 @@ codenerix_email/management/__pycache__/__init__.cpython-35.pyc,sha256=sBoEWs6zdI
|
|
|
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
870
|
codenerix_email/management/commands/email_test.py,sha256=SPsiq0s48sEX_G3piNHq-c1gDOH800H2zTvM19ei2LY,5605
|
|
871
|
-
codenerix_email/management/commands/emails_recv.py,sha256=
|
|
871
|
+
codenerix_email/management/commands/emails_recv.py,sha256=DlKa4pRoCM2IrDPd2j8BY7I2ufl-rHRvavad3f66muc,37875
|
|
872
872
|
codenerix_email/management/commands/emails_send.py,sha256=scCFklro4WVMYm-1ataSjUMsPT-Ie5u_DdA55CQcTCQ,7944
|
|
873
873
|
codenerix_email/management/commands/recv_emails.py,sha256=aXmhdXlamiNxRpMIDSKBXUBhkOcwi5l_Pme7jSQUCME,273
|
|
874
874
|
codenerix_email/management/commands/send_emails.py,sha256=a1MnpvZKAEFdXNfmI5oFUkVxy4PZ1AjaJS6GH90zeD0,273
|
|
@@ -1689,8 +1689,8 @@ codenerix_email/migrations/__pycache__/__init__.cpython-35.pyc,sha256=2g70xiMW6o
|
|
|
1689
1689
|
codenerix_email/migrations/__pycache__/__init__.cpython-39.pyc,sha256=qNj2NH0YvoWPnCKxkVZPsEFsbM05y7t1njMskNISdVQ,168
|
|
1690
1690
|
codenerix_email/static/codenerix_email/emailmessages_rows.html,sha256=cA2ru5ti9WnPhhvFNEpI2tTR7gZzUYXWdzngRKU6a7k,2196
|
|
1691
1691
|
codenerix_email/static/codenerix_email/emailreceiveds_rows.html,sha256=u9DXVdzKhx9WlJgcK_cT2DfGp9bGIKTBn3LDQplB4g4,2032
|
|
1692
|
-
django_codenerix_email-4.0.
|
|
1693
|
-
django_codenerix_email-4.0.
|
|
1694
|
-
django_codenerix_email-4.0.
|
|
1695
|
-
django_codenerix_email-4.0.
|
|
1696
|
-
django_codenerix_email-4.0.
|
|
1692
|
+
django_codenerix_email-4.0.43.dist-info/LICENSE,sha256=IXMIpi75XsrJt1Sznt4EftT9c_4X0C9eqK4tHhH8H48,11339
|
|
1693
|
+
django_codenerix_email-4.0.43.dist-info/METADATA,sha256=_KErLKnL64iEgVwy1H97rBswYHI3lpxGzCZTaORjb28,2676
|
|
1694
|
+
django_codenerix_email-4.0.43.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
|
|
1695
|
+
django_codenerix_email-4.0.43.dist-info/top_level.txt,sha256=lljSA0iKE_UBEM5gIrGQwioC_i8Jjnp-aR1LFElENgw,16
|
|
1696
|
+
django_codenerix_email-4.0.43.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{django_codenerix_email-4.0.41.dist-info → django_codenerix_email-4.0.43.dist-info}/top_level.txt
RENAMED
|
File without changes
|