【问题标题】:How do I resolve a Bad Request 400 error using send_mail function?如何使用 send_mail 函数解决错误请求 400 错误?
【发布时间】:2022-01-13 17:13:07
【问题描述】:

我正在使用 React 前端将数据从 React 呈现的联系表单发送到 Django 后端;它将数据作为电子邮件发送。但是,我不断收到 400 Bad Request 错误。我尝试在 shell 中使用 send_mail 函数,但出现此错误:“socket.gaierror: [Errno 11001] getaddrinfo failed”

Contact.js


    const sendEmail = () => {
        const csrfCookie = Cookies.get('csrftoken');
        
        console.log(formValue);
        axios.post("contact/", formValue, {
            headers: {
                'X-CSRFTOKEN': csrfCookie,
            },
        })
            .then(response => {
                console.log(response);
            })
            .catch(error => {
                console.log(error);
            });
    };

    const handleSubmit = (event) => {
        event.preventDefault();
        sendEmail();
        setFormValue({
            name: "",
            email: "",
            message: "",
        });
    };

urls.py

from django.urls import path

from django.views.generic import TemplateView

from .views import Contact

app_name = "core"

urlpatterns = [
    path("", TemplateView.as_view(template_name="core/home.html"), name="home"),
    path("contact/", Contact.as_view(), name="contact"),
]

views.py

class Contact(APIView):
    def post(self, request):
        serializer = ContactSerializer(data=request.data)
        if serializer.is_valid():
            form = serializer.data
            subject = "Website Inquiry"
            body = {
                "name": form["name"],
                "email": form["email"],
                "message": form["message"],
            }
            message = "\n".join(body.values())

            try:
                send_mail(
                    subject,
                    message,
                    settings.EMAIL_HOST_USER,
                    [settings.RECIPIENT_ADDRESS],
                )
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            except:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

settings.py

env = environ.Env()
environ.Env.read_env()

EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "EMAIL_HOST"
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = env("EMAIL_HOST_USER")
EMAIL_HOST_PASSWORD = env("EMAIL_HOST_PASSWORD")

RECIPIENT_ADDRESS = env("RECIPIENT_ADDRESS")

【问题讨论】:

    标签: reactjs django django-rest-framework


    【解决方案1】:

    可能是因为你的EMAIL_HOST 错了?

    env = environ.Env()
    environ.Env.read_env()
    
    EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
    EMAIL_HOST = env("EMAIL_HOST") # <-------- load from env
    EMAIL_PORT = 587
    EMAIL_USE_TLS = True
    EMAIL_HOST_USER = env("EMAIL_HOST_USER")
    EMAIL_HOST_PASSWORD = env("EMAIL_HOST_PASSWORD")
    
    RECIPIENT_ADDRESS = env("RECIPIENT_ADDRESS")
    

    【讨论】:

    • 这总是最简单的事情。谢谢,我不知道我是怎么漏掉的。
    • 如果答案帮助您找到问题,请将其标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2015-11-21
    • 2020-09-02
    • 2021-09-10
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    相关资源
    最近更新 更多