You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django发送邮件时遭遇(_ssl.c:3895) SSL证书错误求助

Django SMTP邮件发送SSL证书问题

使用django.core.mail.backends.smtp.EmailBackend发送邮件时,遇到SSL证书相关问题。

配置信息(Settings.py)

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'email@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_SSL_CERTFILE = certifi.where()
EMAIL_SSL_CA_BUNDLE = certifi.where()

密码为谷歌账户创建的应用专用密码,尝试过Elastic Email、SendGrid等第三方邮件服务,依然报错。移除EMAIL_SSL_CERTFILE和EMAIL_SSL_CA_BUNDLE配置项后,会触发(_ssl.c:997)错误。

视图代码(views.py)

@api_view(["POST"])
def signupUser(request):
    serializer = UserSerializer(data=request.data)

    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data)
    else:
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

序列化器代码(Serializers.py)

import random

from user_api.models import CustomUser
from django.contrib.auth.hashers import make_password
from django.core.mail import EmailMessage
from django.core.mail import send_mail

from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = CustomUser
        fields = ['username', 'email', 'password', 'profile_image', 'api_key']
        extra_kwargs = {'password': {'write_only': True}, 'id': {'read_only': True}}

    def update(self, instance, validated_data):
        instance.username = validated_data['username']
        instance.email = validated_data['email']
        instance.api_key = validated_data['api_key']
        instance.profile_image = validated_data['profile_image']

        instance.save()
        return instance

    def create(self, validated_data):
        verification_code = random.randint(100000, 999999)
        user = CustomUser.objects.create(username=validated_data['username'],email=validated_data['email'], password=make_password(validated_data['password']), verification_code=verification_code)
        user.set_password(validated_data['password'])
        user.save()

        email = EmailMessage(
            'Hello',
            f'This is your verification code : {verification_code}',
            'email@gmail.com',
            [validated_data['email']]
        )

        email.fail_silently=False
        email.send()
        
        return user

切换EMAIL_BACKEND为django.core.mail.backends.console.EmailBackend时,功能正常,邮件内容会输出到控制台。

内容的提问来源于stack exchange,提问作者TheButterMineCutter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:42:35