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.
@@ -1,4 +1,4 @@
1
- __version__ = "4.0.41"
1
+ __version__ = "4.0.43"
2
2
 
3
3
  __authors__ = [
4
4
  "Juan Miguel Taboada Godoy <juanmi@juanmitaboada.com>",
@@ -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 = original_msg.get(
625
- "X-Codenerix-Tracking-ID"
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 = headers_msg.get(
643
- "X-Codenerix-Tracking-ID"
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 = status_headers.get("Action", "").lower()
727
- status_code = status_headers.get("Status", "")
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-codenerix-email
3
- Version: 4.0.41
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=fvnPvF-O5l4qg-_eeRjKHdMZDzfLHFHFDi1l8fzeLQ4,149
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=15V6lHDQ0IWV_UqdkRd4uPnweplUuyHbpl8lpW1wUTI,313
831
- codenerix_email/__pycache__/__init__.cpython-311.pyc,sha256=UWUl2oUBod7dR46Nr9F955JjBzb5Hw5FLg0DZAJ3XNk,337
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=6MRABJzVSvOcGzz7qH-1_q9U3o8yNGBVlPB6lkvYlfU,37562
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.41.dist-info/LICENSE,sha256=IXMIpi75XsrJt1Sznt4EftT9c_4X0C9eqK4tHhH8H48,11339
1693
- django_codenerix_email-4.0.41.dist-info/METADATA,sha256=EZuTjqR4JMJ9UnNCudgk6mNmFnIlBjZng24g08-k_JA,2676
1694
- django_codenerix_email-4.0.41.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
1695
- django_codenerix_email-4.0.41.dist-info/top_level.txt,sha256=lljSA0iKE_UBEM5gIrGQwioC_i8Jjnp-aR1LFElENgw,16
1696
- django_codenerix_email-4.0.41.dist-info/RECORD,,
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,,