Как отслеживать статусы писем

Я создаю SAAS систему email маркетинга, где пользователи могут создавать компании и запускать кампании. Каждая кампания будет иметь свои собственные подключенные аккаунты (SMTP). Каждый пользователь получает электронные письма, которые я отправляю через smtplib. Затем я получаю письма обратно с помощью IMAP. Мне нужно отслеживать статус писем, например, доставлены ли они, открыты, получен ли автоматический ответ и т. д.

Для всех подключенных учетных записей, связанных с кампанией компании, электронные письма будут получены и отображены в папке "Входящие". Как определить, что письмо является ответом на отправленное письмо, и установить эту связь?

Как я могу отслеживать статус электронной почты?

Вот структура моей модели

class SentEmail(models.Model):
    campaign = models.ForeignKey(to=Campaign, null=False, blank=False, on_delete=models.CASCADE)
    company = models.ForeignKey(to=Company, null=True, blank=False, on_delete=models.CASCADE)
    template = models.ForeignKey(to=EmailVariant, null=True, blank=True, on_delete=models.CASCADE)
    followup_template = models.ForeignKey(to=FollowUpEmail, null=True, blank=True, on_delete=models.CASCADE)
    contact = models.ForeignKey(to=Contact, null=False, blank=False, on_delete=models.CASCADE)
    connected_account = models.ForeignKey(to=ConnectedAccount, null=False, blank=False, on_delete=models.CASCADE)
    resend_id = models.CharField(max_length=250, null=True, blank=True)
    email_content = models.TextField(null=True, blank=True)
    email_sent = models.BooleanField(default=False)
    email_delivered = models.BooleanField(default=False)
    email_complained = models.BooleanField(default=False)
    email_bounced = models.BooleanField(default=False)
    email_opened = models.BooleanField(default=False)
    email_clicked = models.BooleanField(default=False)
    is_followup = models.BooleanField(default=False)
    is_lead_replied = models.BooleanField(default=False)
    is_automated_reply = models.BooleanField(default=False)
    is_positive_reply = models.BooleanField(default=False)
    created_at = models.DateTimeField(default=timezone.now)

    objects = SentEmailManager()

    class Meta:
        verbose_name = 'Sent Email'
        verbose_name_plural = 'Sent Emails'

    def __str__(self):
        return self.contact.name

Я изучил информацию, используя ChatGPT и другие ресурсы, и некоторые предлагают использовать веб-крючки для отслеживания событий и их настройки, или включить отслеживание в панели настроек SMTP.

Однако в моем сценарии каждый пользователь, купивший систему, может создать компанию, и у каждой компании может быть несколько кампаний. Каждая кампания может иметь несколько подключенных SMTP-аккаунтов. Поэтому каждому пользователю нецелесообразно самостоятельно настраивать веб-крючки. Мне нужно решение, чтобы решить эту проблему в рамках моей системы.

Мне нужно что-то уникальное, например, email id, и тогда я смогу увидеть, что это ответ на то письмо, которое я храню в таблице sentemail

Вернуться на верх