保存后,Newletter视图不发送电子邮件,无错误显示

时间:2020-06-19 14:29:24

标签: python django

我创建了一个通讯应用程序,用于向订阅者发送电子邮件。添加新的新闻通讯并将其设置为等于已发布后,它应该发送电子邮件,但是,该新闻通讯被保存,没有发送任何电子邮件。

该电子邮件配置正确,因为我正在接收来自其他应用程序的电子邮件(例如,忘记密码的电子邮件)

这是完整的views.py

def control_newsletter(request):
    form = NewsletterCreationForm(request.POST or None)

    if form.is_valid():
        instance = form.save()
        newsletter = Newsletter.objects.get(id=instance.id)
        if newsletter.status == "Published":
            subject = newsletter.subject
            body = newsletter.body
            from_email = settings.EMAIL_HOST_USER
            for email in newsletter.email.all():
                send_mail(subject=subject, from_email=from_email, recipient_list=[
                          email], message=body, fail_silently=False)
    context = {
        "form": form,
    }
    template = 'control_newsletter.html'
    return render(request, template, context)


def control_newsletter_list(request):
    newsletter = Newsletter.objects.all()
    paginator = Paginator(newsletter, 10)
    page = request.GET.get('page')

    try:
        items = paginator.page(page)
    except PageNotAnInteger:
        items = paginator.page(1)
    except EmptyPage:
        items = paginator.page(paginator.num_pages)

    index = items.number - 1
    max_index = len(paginator.page_range)
    start_index = index - 5 if index >= 5 else 0
    end_index = index + 5 if index <= max_index - 5 else max_index
    page_range = paginator.page_range[start_index:end_index]

    context = {
        "items": items,
        "page_range": page_range
    }
    template = "control_newsletter_list.html"
    return render(request, template, context)


def control_newsletter_detail(request, pk):
    newsletter = get_object_or_404(Newsletter, pk=pk)
    context = {
        "newsletter": newsletter,
    }
    template = "control_newsletter_detail.html"
    return render(request, template, context)


def control_newsletter_edit(request, pk):
    newsletter = get_object_or_404(Newsletter, pk=pk)

    if request.method == 'POST':
        form = NewsletterCreationForm(request.POST, instance=newsletter)

        if form.is_valid():
            newsletter = form.save()

            if newsletter.status == "Published":
                subject = newsletter.subject
                body = newsletter.body
                from_email = settings.EMAIL_HOST_USER
                for email in newsletter.email.all():
                    send_mail(subject=subject, from_email=from_email, recipient_list=[
                        email], message=body, fail_silently=False)

            return redirect('control_panel:control_newsletter_detail', pk=newsletter.pk)
    else:
        form = NewsletterCreationForm(instance=newsletter)
    context = {
        "form": form,
    }
    template = 'control_newsletter.html'
    return render(request, template, context)


def control_newsletter_delete(request, pk):
    newsletter = get_object_or_404(Newsletter, pk=pk)

    if request.method == 'POST':
        form = NewsletterCreationForm(request.POST, instance=newsletter)

        if form.is_valid():
            newsletter.delete()

            return redirect('control_panel:control_newsletter_list')
    else:
        form = NewsletterCreationForm(instance=newsletter)
    context = {
        "form": form,
    }
    template = 'control_newsletter_delete.html'
    return render(request, template, context)

这是模型。py


class NewsletterUser(models.Model):
    email = models.EmailField()
    date_added = models.DateTimeField(default=timezone.now)

    class Meta:
        verbose_name = "Newsletter User"

    def __str__(self):
        return self.email


class Newsletter(models.Model):
    EMAIL_STATUS_CHOICES = (
        ('Draft', 'Draft'),
        ('Published', 'Published')
    )
    subject = models.CharField(max_length=250)
    body = models.TextField()
    email = models.ManyToManyField(NewsletterUser)
    status = models.CharField(max_length=10, choices=EMAIL_STATUS_CHOICES)
    created = models.DateTimeField(default=timezone.now)
    updated = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.subject

0 个答案:

没有答案
相关问题