django:从管理面板向用户发送邮件

django : send mail to users from admin panel

我想知道如何配置 django 管理员以查看表单,因此 auth_user 应该发送电子邮件给订阅用户。

我做了什么:

models.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.db import models
from datetime import datetime




class Mail(models.Model):
    email=models.EmailField(max_length=255,unique=True,help_text="Το email του χρ?στη",verbose_name="Email")
    timestamp=models.DateTimeField(default=datetime.now,help_text="Η ημερομην?α που ο χρ?στη? γρ?φτηκε στην newsletter list",verbose_name="Ημερομην?α εγγραφ??")
    delete_link=models.SlugField(unique=True,max_length=255,null=True,blank=True)
    def __unicode__(self):
        return self.email

    class Meta:
        verbose_name ="Email User"
        verbose_name_plural ="Email Users"

forms.py

1
2
3
4
5
6
from django import forms

class MailForm(forms.Form):
        subject = forms.CharField(max_length=255)
        message = forms.CharField(widget=forms.Textarea)
        attachment = forms.FileField()

我正在尝试在管理页面中添加一个指向时事通讯应用程序的链接。示例:

enter

1
2
3
4
5
6
7
8
9
def clean_subject(self):
        if self.cleaned_data["subject"]=="" or self.cleaned_data["subject"]==None:
            raise forms.ValidationError("My text goes here")    
        return self.cleaned_data["subject"]

def clean_message(self):
        if self.cleaned_data["message"]=="" or self.cleaned_data["message"]==None:
            raise forms.ValidationError("My text goes here")    
        return self.cleaned_data["message"]

当表单无效时,django 会显示一条类似标准方式的消息。示例:

django

任何建议我如何配置 django admin 来执行我所描述的操作都会很有用!


我认为您应该创建一个 Mail 模型。首先,您必须创建一个邮件并保存它。然后,您可以使用邮件模型的保存方法将其发送给您的所有电子邮件用户,或者添加自定义管理操作来执行此操作。在我看来,保存方法是最好的。

所以你应该在 models.py 中有这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from django.db import models
from datetime import datetime
from django.core.mail import send_mail

    class Mail(models.Model):
        ...

        class Meta:
            verbose_name ="Email User"
            verbose_name_plural ="Email Users"

    class MailText(models.Model):
        subject = models.Charfield()
        message = models.Charfield()
        attachment = models.Filefield()
        users = models.ManyToManyField(Mail)
        send_it = models.BooleanField(default=False) #check it if you want to send your email

        def save(self):
            if self.send_it:
                #First you create your list of users
                user_list = []
                for u in self.users:
                    user_list.append(u.email)

                #Then you can send the message.
                send_mail(str(self.subject),
                          str(self.message),
                          '[email protected]',
                          user_list,
                          fail_silently=False)

        class Meta:
            verbose_name ="Emails to send"
            verbose_name_plural ="Emails to send"