1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-10 06:48:19 +02:00

Merge pull request #3 from sunset-crew/release_v0.1.2

Release v0.1.2
This commit is contained in:
Joe 2021-02-07 22:51:25 -05:00 committed by GitHub
commit 010611dc55
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 57 additions and 37 deletions

View file

@ -5,6 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
[Also based on](https://github.com/conventional-changelog/standard-version/blob/master/CHANGELOG.md) so decending. [Also based on](https://github.com/conventional-changelog/standard-version/blob/master/CHANGELOG.md) so decending.
## [0.1.2] - 2021-02-07
### Added
- adds unique constrain to the message id and a bit of a change on how to create a message
- adds formatting updates and testing updates
## [0.1.1] - 2021-02-03 ## [0.1.1] - 2021-02-03
### Added ### Added
- adds modified documenation - adds modified documenation

View file

@ -0,0 +1,24 @@
# Generated by Django 3.1.6 on 2021-02-07 02:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("django_mailbox", "0008_auto_20190219_1553"),
]
operations = [
migrations.AlterField(
model_name="message",
name="message_id",
field=models.CharField(
blank=None,
max_length=255,
null=None,
unique=True,
verbose_name="Message ID",
),
),
]

View file

@ -352,6 +352,9 @@ class Mailbox(models.Model):
return new return new
def _process_message(self, message): def _process_message(self, message):
try:
msg = Message(message_id=message["message-id"][0:255].strip())
except Exception:
msg = Message() msg = Message()
msg._email_object = message msg._email_object = message
settings = utils.get_settings() settings = utils.get_settings()
@ -369,8 +372,13 @@ class Mailbox(models.Model):
msg.to_header = utils.convert_header_to_unicode(message["to"]) msg.to_header = utils.convert_header_to_unicode(message["to"])
elif "Delivered-To" in message: elif "Delivered-To" in message:
msg.to_header = utils.convert_header_to_unicode(message["Delivered-To"]) msg.to_header = utils.convert_header_to_unicode(message["Delivered-To"])
try:
msg.save() msg.save()
message = self._get_dehydrated_message(message, msg) message = self._get_dehydrated_message(message, msg)
except django.db.utils.IntegrityError:
logger.warning("Already loaded")
return None
try: try:
body = message.as_string() body = message.as_string()
except KeyError as exc: except KeyError as exc:
@ -467,7 +475,9 @@ class Message(models.Model):
subject = models.CharField(_("Subject"), max_length=255) subject = models.CharField(_("Subject"), max_length=255)
message_id = models.CharField(_("Message ID"), max_length=255) message_id = models.CharField(
_("Message ID"), max_length=255, blank=None, null=None, unique=True
)
in_reply_to = models.ForeignKey( in_reply_to = models.ForeignKey(
"django_mailbox.Message", "django_mailbox.Message",

View file

@ -1,3 +1,3 @@
from django.dispatch.dispatcher import Signal from django.dispatch.dispatcher import Signal
message_received = Signal(providing_args=["message"]) message_received = Signal()

View file

@ -10,7 +10,7 @@ from django_mailbox.models import Mailbox, Message
from django_mailbox.utils import convert_header_to_unicode from django_mailbox.utils import convert_header_to_unicode
from django_mailbox import utils from django_mailbox import utils
from django_mailbox.tests.base import EmailMessageTestCase from django_mailbox.tests.base import EmailMessageTestCase
from django.utils.encoding import force_text from django.utils.encoding import force_str
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
__all__ = ["TestProcessEmail"] __all__ = ["TestProcessEmail"]
@ -347,11 +347,11 @@ class TestProcessEmail(EmailMessageTestCase):
email_object = self._get_email_object( email_object = self._get_email_object(
"message_with_long_content.eml", "message_with_long_content.eml",
) )
size = len(force_text(email_object.as_string())) size = len(force_str(email_object.as_string()))
msg = self.mailbox.process_incoming_message(email_object) msg = self.mailbox.process_incoming_message(email_object)
self.assertEqual(size, len(force_text(msg.get_email_object().as_string()))) self.assertEqual(size, len(force_str(msg.get_email_object().as_string())))
def test_message_saved(self): def test_message_saved(self):
message = self._get_email_object("generic_message.eml") message = self._get_email_object("generic_message.eml")
@ -365,7 +365,7 @@ class TestProcessEmail(EmailMessageTestCase):
msg = self.mailbox.process_incoming_message(message) msg = self.mailbox.process_incoming_message(message)
self.assertNotEquals(msg.eml, None) self.assertNotEqual(msg.eml, None)
self.assertTrue(msg.eml.name.endswith(".eml")) self.assertTrue(msg.eml.name.endswith(".eml"))
@ -384,7 +384,7 @@ class TestProcessEmail(EmailMessageTestCase):
msg = self.mailbox.process_incoming_message(message) msg = self.mailbox.process_incoming_message(message)
self.assertEquals(msg.eml, None) self.assertEqual(msg.eml, None)
def test_message_compressed(self): def test_message_compressed(self):
message = self._get_email_object("generic_message.eml") message = self._get_email_object("generic_message.eml")

View file

@ -1,7 +1,5 @@
import imaplib import imaplib
import logging import logging
from os.path import exists
import json
from django.conf import settings from django.conf import settings
from .base import EmailTransport, MessageParseError from .base import EmailTransport, MessageParseError
@ -36,9 +34,6 @@ class ImapTransport(EmailTransport):
self.delete_message_from_server = getattr( self.delete_message_from_server = getattr(
settings, "DJANGO_MAILBOX_DELETE_MESSAGE_FROM_SERVER", True settings, "DJANGO_MAILBOX_DELETE_MESSAGE_FROM_SERVER", True
) )
self.delete_message_store = getattr(
settings, "DJANGO_MAILBOX_DELETE_MESSAGE_ID_STORE", "/tmp/store.json"
)
self.hostname = hostname self.hostname = hostname
self.port = port self.port = port
self.archive = archive self.archive = archive
@ -111,28 +106,7 @@ class ImapTransport(EmailTransport):
# If the archive folder does not exist, create it # If the archive folder does not exist, create it
self.server.create(self.archive) self.server.create(self.archive)
# PoC of alternative method of storing email
if not self.delete_message_from_server:
j = {"uids": []}
if exists("store.json"):
with open("store.json", "r") as f:
j = json.load(f)
else:
with open("store.json", "w") as f:
json.dump(j, f)
# PoC of alternative method of storing email
for uid in message_ids: for uid in message_ids:
# PoC of alternative method of storing email
if not self.delete_message_from_server:
if uid in j["uids"]:
continue
else:
j["uids"].append(uid)
with open("store.json", "w") as f:
json.dump(j, f)
# PoC of alternative method of storing email
try: try:
typ, msg_contents = self.server.uid("fetch", uid, "(RFC822)") typ, msg_contents = self.server.uid("fetch", uid, "(RFC822)")
if not msg_contents: if not msg_contents:

View file

@ -14,7 +14,8 @@ These ingested messages will be stored in the database in Django models and you
or -- if you're in a hurry -- by using a signal receiver. or -- if you're in a hurry -- by using a signal receiver.
### Usage Usage
-----
1. poetry add django-mailbox 1. poetry add django-mailbox
@ -36,3 +37,9 @@ or -- if you're in a hurry -- by using a signal receiver.
`Github <http://github.com/coddingtonbear/django-mailbox/issues>`_. `Github <http://github.com/coddingtonbear/django-mailbox/issues>`_.
- Test status available on - Test status available on
`Travis-CI <https://travis-ci.org/coddingtonbear/django-mailbox>`_. `Travis-CI <https://travis-ci.org/coddingtonbear/django-mailbox>`_.
Development
-----------
export DJANGO_SETTINGS_MODULE=websrv.settings