Skip to main content
 首页 » 编程设计

python之Django 博客在用户提交表单时向管理员发送电子邮件

2024年10月01日30powertoolsteam

背景

我正在建立一个关于我的研究小组的博客。有一个 join_us 页面,用户可以在其中填写申请表以申请研究计划。基本功能运行良好,但我想在有人提交申请时通知我的导师。

问题

Django 的官方文档关于 sending_email 有点模棱两可,我仍然没有弄清楚如何将表单的值添加到电子邮件内容中。

代码

views.py

def application_action(request): 
    last_name = request.POST.get('last_name', 'LAST_NAME') 
    first_name = request.POST.get('first_name', 'FIRST_NAME') 
    email_address = request.POST.get('email_address', 'EMAIL_ADDRESS') 
    program_type = request.POST.get('program_type', 'PROGRAM_TYPE') 
    personal_statement = request.POST.get('personal_statement', 'PERSONAL_STATEMENT') 
    resume = request.FILES.get('resume') 
    models.Application.objects.create(last_name=last_name, first_name=first_name, program_type=program_type, 
                                    email_address=email_address, personal_statement=personal_statement, 
                                  resume=resume) 
    send_mail( 
    'An new application', 
    'Dear professor, you received an new application. Please check it out in the administration console', 
    'from@example.com', 
    ['to@example.com'], 
    fail_silently=False, 
) 
    application = models.Application.objects.all() 
    return render(request, 'research_spacecoupe/join_us.html', {'application': application}) 

settings.py:

    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
    EMAIL_USE_TLS = False 
    EMAIL_HOST = 'smtp.126.com' 
    EMAIL_PORT = 25 
    EMAIL_HOST_USER = 'demo@126.com' 
    EMAIL_HOST_PASSWORD = 'demo' 
    DEFAULT_FROM_EMAIL = 'demo <demo@126.com>' 

模型.py

class Application(models.Model): 
    program_choice = (('硕士项目', '硕士'), ('博士项目', '博士'), ('博士后项目', '博士后')) 
    first_name = models.CharField(max_length=30, default="名") 
    last_name = models.CharField(max_length=30, default="姓") 
    email_address = models.CharField(max_length=30, null=True) 
    program_type = models.CharField(max_length=10, choices=program_choice) 
    personal_statement = models.TextField(null=True) 
    application_time = models.DateTimeField(auto_now=1) 
    resume = models.FileField(upload_to='resumes') 
 
def application_info(self): 
    return '%s %s %s' % (self.first_name, self.last_name, self.program_type) 

注意事项

希望HTML中的表单值能随邮件一起发送,以便管理员查看更多信息。

请您参考如下方法:

您可以格式化电子邮件以发送详细信息。您可以根据需要添加更多详细信息。下面是一个例子。

models.Application.objects.create(last_name=last_name, first_name=first_name, program_type=program_type, 
                                    email_address=email_address, personal_statement=personal_statement, 
                                  resume=resume) 
    send_mail( 
    'An new application', 
    'Dear professor, you received an new application. Please check it out in the administration console details are as follows' + 
    ': first_name: {}, last_name: {}'.format(first_name, last_name), 
    'from@example.com', 
    ['to@example.com'], 
    fail_silently=False, 
)