Django:创建条目时向用户发送邮件

时间:2017-09-29 15:02:43

标签: python django email

我已经阅读了一些有关这方面的问题,但没有一个适用于我的案例。 我想在保存新条目时向用户发送邮件。

发表/ models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.dispatch import receiver

class Post(models.Model):
    client = models.ForeignKey(User)
    date = models.DateTimeField(blank=True, editable=False)


@receiver(post_save, sender=User)
def first_mail(sender, instance, **kwargs):
    if kwargs['created']:
        user_email = instance.User.email
        subject, from_email, to = 'New Post', 'from@example.com', user_email

        text_content = render_to_string('post/mail_post.txt')
        html_content = render_to_string('post/mail_post.html')

        # create the email, and attach the HTML version as well.
        msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
        msg.attach_alternative(html_content, "text/html")
        msg.send()

此信号不会发送任何电子邮件。我正在使用mail_panel来跟踪电子邮件。

1 个答案:

答案 0 :(得分:1)

参考django文档:

  

sender - 模型类。

https://docs.djangoproject.com/en/1.11/ref/signals/#post-save

因此,如果您要保存Post类的对象,那么信号发送者是Post而不是User。

然后在信号中,您引用instance(类Post的对象),并访问其字段client(FK链接,类User的实例)和得到它的字段email

正确的形式:

user_email = instance.client.email

在课堂上假设用户出现在电子邮件领域。