【问题标题】:How to send mail after api endpoint is invoked, Django?调用api端点后如何发送邮件,Django?
【发布时间】:2023-03-15 01:36:01
【问题描述】:

我的应用程序将 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 端点。 谁能帮我解决这个问题?

【问题讨论】:

  • 是的,您可以,只要请求该端点,就从视图函数 indjango 发送邮件。
  • 请分享您的视图集代码。您可以覆盖 create/perform_create 方法来发送电子邮件(应该使用线程发送)。

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


【解决方案1】:

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/

【讨论】:

    【解决方案2】:

    你可以使用djangosend_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 发送邮件,然后返回响应。

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2017-02-18
      • 2022-06-20
      相关资源
      最近更新 更多