mirror of
https://github.com/coddingtonbear/django-mailbox.git
synced 2026-07-10 06:48:19 +02:00
adds unique constrain to the message id and a bit of a change on how to create a message
This commit is contained in:
parent
1f018e9bdc
commit
83ee3bc4be
4 changed files with 33 additions and 29 deletions
|
|
@ -5,6 +5,10 @@ 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-06
|
||||||
|
### Added
|
||||||
|
- adds unique constrain to the message id and a bit of a change on how to create a message
|
||||||
|
|
||||||
## [0.1.1] - 2021-02-03
|
## [0.1.1] - 2021-02-03
|
||||||
### Added
|
### Added
|
||||||
- adds modified documenation
|
- adds modified documenation
|
||||||
|
|
|
||||||
18
django_mailbox/migrations/0009_auto_20210207_0221.py
Normal file
18
django_mailbox/migrations/0009_auto_20210207_0221.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# 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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -352,7 +352,7 @@ class Mailbox(models.Model):
|
||||||
return new
|
return new
|
||||||
|
|
||||||
def _process_message(self, message):
|
def _process_message(self, message):
|
||||||
msg = Message()
|
msg = Message(message_id=message["message-id"][0:255].strip())
|
||||||
msg._email_object = message
|
msg._email_object = message
|
||||||
settings = utils.get_settings()
|
settings = utils.get_settings()
|
||||||
|
|
||||||
|
|
@ -361,16 +361,21 @@ class Mailbox(models.Model):
|
||||||
msg.mailbox = self
|
msg.mailbox = self
|
||||||
if "subject" in message:
|
if "subject" in message:
|
||||||
msg.subject = utils.convert_header_to_unicode(message["subject"])[0:255]
|
msg.subject = utils.convert_header_to_unicode(message["subject"])[0:255]
|
||||||
if "message-id" in message:
|
# ~ if "message-id" in message:
|
||||||
msg.message_id = message["message-id"][0:255].strip()
|
# ~ msg.message_id = message["message-id"][0:255].strip()
|
||||||
if "from" in message:
|
if "from" in message:
|
||||||
msg.from_header = utils.convert_header_to_unicode(message["from"])
|
msg.from_header = utils.convert_header_to_unicode(message["from"])
|
||||||
if "to" in message:
|
if "to" in message:
|
||||||
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"])
|
||||||
msg.save()
|
try:
|
||||||
message = self._get_dehydrated_message(message, msg)
|
msg.save()
|
||||||
|
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 +472,7 @@ 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",
|
||||||
|
|
|
||||||
|
|
@ -36,9 +36,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 +108,8 @@ 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:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue