使用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
相关产品推荐
相关产品推荐

