引发api端点后如何发送邮件,Django?

时间:2019-11-03 09:35:42

标签: django django-models django-rest-framework

我的应用程序将React用于前端以及Django和Django RestFramework。我正在尝试发送电子邮件。从React Side不可能。所以我想在这里用

在django中创建模型邮件
class Mail(models.Model):
    MAIL_SENT= (
        ('Y', 'Yes'),
        ('N', 'No'),
    )
    send_to= models.CharField(max_length=120)
    reply_to= models.CharField(max_length=120)
    message= models.TextField()
    subject= models.TextField()
    mail_sent= models.CharField(max_length=1, default="Y", choices=MAIL_SENT)

    def __self__(self):
        return self.send_to

我想做的是在post方法时为Mail和send方法创建一个API端点。 有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

Django提供如下send_mail函数:

from django.core.mail import send_mail

send_mail(
    'Subject here',
    'Here is the message.',
    'from@example.com',
    ['to@example.com'],
    fail_silently=False,
)

文档链接:https://docs.djangoproject.com/en/2.2/topics/email/

答案 1 :(得分:0)

您可以使用Django send_mail函数

示例:

from django.core.mail import send_mail

send_mail(
    'Subject here',
    'Here is the message.',
    'from@example.com',
    ['to@example.com'],
    fail_silently=False,
)

您必须使用mail_port,默认from_emailpassword

参考:https://docs.djangoproject.com/en/2.2/topics/email/

===============================

因此您可以像这样创建端点

from django.core.mail import send_mail
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status


class MailSender(APIView):

    def post(self, request, format=None):
        to_email = request.data.get("to_email")
        send_mail(
            'Subject here',
            'Here is the message.',
            'from@example.com',
            ['to_email'],
            fail_silently=False,
        )
        return Response({"message": "e-mail has been sent successfully"}, 
                        status=status.HTTP_200_OK)

您还可以使用threading发送邮件,然后返回响应。