Как отслеживать статусы писем
Я создаю 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