Я создал приложение для рассылки новостей, чтобы отправлять электронные письма подписчикам. После добавления нового информационного бюллетеня и настройки его равным опубликованному, он должен отправить электронное письмо, но вместо этого информационный бюллетень сохраняется без отправки электронных писем.
Конфигурация электронной почты правильная, поскольку я получаю электронные письма от других приложений (например, адрес электронной почты с забытым паролем)
Вот полный файл 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)
Вот файл models.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