簡體   English   中英

Django Rest 框架 工作從聯系表格發送 email

[英]Django Rest frame Work send email from contact form

我沒有收到從聯系表發送的電子郵件。 我用 postman 試了一下,它沒有發送任何電子郵件。 當我想發布問題時,我剛剛刪除了EMAIL_HOST_USEREMAIL_HOST_PASSWORD詳細信息。 這是我的代碼:

Views.py

from .serializers import *
from rest_framework.permissions import AllowAny
from rest_framework.views import APIView
from django.core.mail import send_mail
from rest_framework import status
from rest_framework.response import Response
from contactform.api.serializers import ContactSerailizer


class ContactView(APIView):
    
    def post(self, request, *args, **kwargs):
         serailizer_class = ContactSerailizer(data=request.data)
        if serailizer_class.is_valid():
             data = serailizer_class.validated_data
             w3lName = request.POST('w3lName')
             w3lSender = request.POST('w3lSender')
             w3lMessage = request.POST('w3lMessage')
             send_mail('Contact Form mail from ' + w3lName,
                       w3lMessage, w3lSender, ['test@gmail.com'],)
            return Response({"success": "Sent"}, status=status.HTTP_200_OK)
        else:
            return Response({'success': "Failed"}, status=status.HTTP_400_BAD_REQUEST)

Serializers.py

from rest_framework import serializers

class ContactSerailizer(serializers.Serializer):
    w3lName = serializers.CharField()
    w3lSender = serializers.EmailField()
    w3lMessage = serializers.CharField()

Settings

#Email config
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = '587'
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = True

聯系方式: Contact.html

<form action="{% url 'contact' %}" method="post" class="signin-form">
                  {% csrf_token %}  
                  <div class="form-input">
                        <input type="text" name="w3lName" id="w3lName" placeholder="Your name">
                    </div>
                    <div class="form-input">
                        <input type="email" name="w3lSender" id="w3lSender" placeholder="Your email address"
                            required="">
                    </div>
                    <div class="form-input">
                        <textarea name="w3lMessage" id="w3lMessage" placeholder="Your message" required=""></textarea>
                    </div>
                    <div class="text-right">
                        <button type="submit" class="btn btn-style btn-primary">Submit</button>
                    </div>
                </form>

我已經能夠修復它,這是我使用的:

視圖.py

from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view
from django.core.mail import send_mail

from contactform.models import ContactModel
from contactform.api.serializers import ContactSerailizer

@api_view(['POST',])
def api_create_contact_view(request):
    if request.method == "POST":
        serializer = ContactSerailizer(data=request.data)
        if serializer.is_valid():
            name = request.POST['name']
            sender = request.POST['sender']
            message = request.POST['message']

            # send mail
            send_mail(
                'Contact Form mail from ' + name,
                message,
                sender,
                ['test@gmail.com'],
            )
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我知道這是一個遲到的答案,但也許這會幫助許多其他人。

這是使用class的正確方法。

class ContactView(APIView):
    serializer_class = ContactSerailizer
    
    def post(self, request, *args, **kwargs):
        serailizer_class = ContactSerailizer(data=request.data)
        if serailizer_class.is_valid():
             data = serailizer_class.validated_data
             w3lName = data.get('w3lName')
             w3lSender = data.get('w3lSender')
             w3lMessage = data.get('w3lMessage')
             send_mail('Contact Form mail from ' + w3lName,
                       w3lMessage, w3lSender, ['test@gmail.com'],)
            return Response({"success": "Sent"}, status=status.HTTP_200_OK)
        else:
            return Response({"error": "Failed"}, status=status.HTTP_400_BAD_REQUEST)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM