From 6673c58ca432db19e953b8aa51a0d5d97dc1d106 Mon Sep 17 00:00:00 2001 From: Mike Varga Date: Mon, 17 Oct 2022 13:09:24 -0400 Subject: [PATCH 1/2] Collect a timestamp from emails + migration --- django_mailbox/admin.py | 1 + .../migrations/0009_message_timestamp.py | 20 +++++++++++++++++++ django_mailbox/models.py | 8 ++++++++ setup.py | 1 + 4 files changed, 30 insertions(+) create mode 100644 django_mailbox/migrations/0009_message_timestamp.py diff --git a/django_mailbox/admin.py b/django_mailbox/admin.py index 4d489b1..7951b2e 100644 --- a/django_mailbox/admin.py +++ b/django_mailbox/admin.py @@ -79,6 +79,7 @@ class MessageAdmin(admin.ModelAdmin): ] list_display = ( 'subject', + 'timestamp', 'processed', 'read', 'mailbox', diff --git a/django_mailbox/migrations/0009_message_timestamp.py b/django_mailbox/migrations/0009_message_timestamp.py new file mode 100644 index 0000000..67c4e02 --- /dev/null +++ b/django_mailbox/migrations/0009_message_timestamp.py @@ -0,0 +1,20 @@ +# Generated by Django 3.1.4 on 2022-10-17 11:13 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_mailbox', '0008_auto_20190219_1553'), + ] + + operations = [ + migrations.AddField( + model_name='message', + name='timestamp', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Timestamp'), + preserve_default=False, + ), + ] diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 5cd21d7..f868b4a 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -18,6 +18,7 @@ import os.path import sys import uuid from datetime import timedelta +from dateutil import parser from tempfile import NamedTemporaryFile import django @@ -379,6 +380,11 @@ class Mailbox(models.Model): msg.to_header = utils.convert_header_to_unicode( message['Delivered-To'] ) + if "date" in message: + msg.timestamp = parser.parse(message["date"]) + elif "Date" in message: + msg.timestamp = parser.parse(message["Date"]) + if Message.objects.filter(message_id=msg.message_id).count() != 0: logger.info("Skipping existing message: %s", msg.message_id,) @@ -525,6 +531,8 @@ class Message(models.Model): help_text=_('True if the e-mail body is Base64 encoded'), ) + timestamp = models.DateTimeField(_('Timestamp')) + processed = models.DateTimeField( _('Processed'), auto_now_add=True diff --git a/setup.py b/setup.py index eb7cdea..f59e7ce 100755 --- a/setup.py +++ b/setup.py @@ -56,5 +56,6 @@ setup( include_package_data=True, install_requires=[ 'six>=1.6.1', + 'python-dateutil==2.8.2', ] ) From f065d60f547c2d24fb0a8537c78b4fcd66aa0a50 Mon Sep 17 00:00:00 2001 From: Mike Varga Date: Mon, 17 Oct 2022 13:12:23 -0400 Subject: [PATCH 2/2] Default to now() for Date --- django_mailbox/models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/django_mailbox/models.py b/django_mailbox/models.py index f868b4a..b7d13aa 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -384,6 +384,8 @@ class Mailbox(models.Model): msg.timestamp = parser.parse(message["date"]) elif "Date" in message: msg.timestamp = parser.parse(message["Date"]) + else: + msg.timestamp = now() if Message.objects.filter(message_id=msg.message_id).count() != 0: