54 lines
2 KiB
Python
54 lines
2 KiB
Python
import random
|
|
|
|
from django.db import models
|
|
from django_softdelete.models import SoftDeleteModel
|
|
|
|
from core.settings import MAIL_DOMAIN, ACTIVE_SPAM_TRAINING
|
|
from authentication.models import ExtendedUser
|
|
from core.settings import MAIL_DOMAIN
|
|
from files.models import AbstractFile
|
|
from inventory.models import Event
|
|
from tickets.models import IssueThread
|
|
|
|
|
|
class Email(SoftDeleteModel):
|
|
id = models.AutoField(primary_key=True)
|
|
timestamp = models.DateTimeField(auto_now_add=True)
|
|
body = models.TextField()
|
|
subject = models.CharField(max_length=255)
|
|
sender = models.CharField(max_length=255)
|
|
recipient = models.CharField(max_length=255)
|
|
reference = models.CharField(max_length=255, null=True, unique=True)
|
|
in_reply_to = models.CharField(max_length=255, null=True)
|
|
raw_file = models.FileField(upload_to='raw_mail/')
|
|
issue_thread = models.ForeignKey(IssueThread, models.SET_NULL, null=True, related_name='emails')
|
|
event = models.ForeignKey(Event, models.SET_NULL, null=True)
|
|
|
|
def save(self, *args, **kwargs):
|
|
super().save(*args, **kwargs)
|
|
if not self.reference:
|
|
self.reference = f'<{random.randint(0, 1000000000):09}@{MAIL_DOMAIN}>'
|
|
self.save()
|
|
|
|
def train_spam(self):
|
|
if ACTIVE_SPAM_TRAINING:
|
|
import subprocess
|
|
path = self.raw_file.path
|
|
subprocess.run(["rspamc", "learn_spam", path])
|
|
|
|
def train_ham(self):
|
|
if ACTIVE_SPAM_TRAINING:
|
|
import subprocess
|
|
path = self.raw_file.path
|
|
subprocess.run(["rspamc", "learn_ham", path])
|
|
|
|
|
|
class EventAddress(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
event = models.ForeignKey(Event, models.SET_NULL, null=True, related_name='addresses')
|
|
address = models.CharField(max_length=255, unique=True)
|
|
|
|
|
|
class EmailAttachment(AbstractFile):
|
|
email = models.ForeignKey(Email, models.CASCADE, related_name='attachments', null=True)
|
|
name = models.CharField(max_length=255)
|