[英]Django Rest frame Work send email from contact form
我沒有收到從聯系表發送的電子郵件。 我用 postman 試了一下,它沒有發送任何電子郵件。 當我想發布問題時,我剛剛刪除了EMAIL_HOST_USER
和EMAIL_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.