Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在发送电子邮件之前设置验证电子邮件条件?_Python_Django_Sendmail - Fatal编程技术网

Python 如何在发送电子邮件之前设置验证电子邮件条件?

Python 如何在发送电子邮件之前设置验证电子邮件条件?,python,django,sendmail,Python,Django,Sendmail,如果电子邮件不存在,我如何设置条件?请不要将此电子邮件发送到我自己的电子邮件 我在这里尝试,当我放置(exists)方法时,但我看到它似乎不起作用 在这两种情况下,都会向我显示电子邮件成功消息 我怎样才能阻止它呢? 如果我的代码中有一个错误变成了错误,我希望得到处理该错误的建议 对不起,我的英语不流利 views.py from .forms import SignUp, ResetPassword, EditForm from website import settings from djan

如果电子邮件不存在,我如何设置条件?请不要将此电子邮件发送到我自己的电子邮件 我在这里尝试,当我放置(exists)方法时,但我看到它似乎不起作用
在这两种情况下,都会向我显示电子邮件成功消息
我怎样才能阻止它呢?
如果我的代码中有一个错误变成了错误,我希望得到处理该错误的建议 对不起,我的英语不流利

views.py

from .forms import SignUp, ResetPassword, EditForm
from website import settings
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth.views import PasswordResetView, PasswordResetDoneView
from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from django.core.mail import send_mail
from django.contrib.auth.models import User


class PasswordReset(PasswordResetView, FormView):
    template_name = 'account/password_reset_view.html'
    success_url = reverse_lazy('account:password_reset_done')
    email_template_name = 'account/reset_password_email.html'
    subject_template_name = 'account/password_reset_subject.txt'
    form_class = ResetPassword


class PasswordResetDone(PasswordResetDoneView):
    template_name = 'account/password_reset_done.html'

    # Reset Your Password By G-mail Account
    def send_mail(self, request, **kwargs):
        subject = "Complete the modification of the password form"
        message = "please check here"

        if request.method == "POST":
            user = User.objects.filter(email=str(request.POST['email']))
            if user.exists():
                recipient = str(request.POST.get(kwargs['Email']))
                if subject and message and recipient:
                    send_mail(subject=subject,
                              message=message,
                              from_email=settings.EMAIL_HOST,
                              auth_user=request.user.email,
                              auth_password=request.user.password,
                              recipient_list=[recipient],
                              fail_silently=False)
                return render(request, self.template_name)
            else:
                return redirect('account:password-reset')


def register(request):
    template_name = 'account/register.html'
    if request.method == 'POST':
        form = SignUp(request.POST)
        if form.is_valid():
            # save in database
            form.save()
            return redirect('account:login')
        return render(request, template_name, {'form': form})
    else:
        form = SignUp()
        return render(request, template_name, {'form': form})


@login_required
def view_profile(request):
    return render(request, 'account/profile.html', {'user': request.user})


@login_required
def edit_profile(request):
    template_name = 'account/edit_profile.html'
    if request.method == "POST":
        form = EditForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('account:view_profile')
        return render(request, template_name, {'form': form})
    else:
        form = EditForm()
        return render(request, template_name, {'form': form})
forms.py

from django.contrib.auth.forms import UserCreationForm, UserChangeForm, PasswordResetForm
from django import forms
from django.contrib.auth.models import User


class SignUp(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'password1', 'password2', 'email')

    def save(self, commit=True):
        user = super(SignUp, self).save(commit=False)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        user.set_password(self.cleaned_data['password1'])
        # Save this session without saving in database
        if commit:
            user.save()
        return user


class ResetPassword(PasswordResetForm):
    email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'placeholder': 'Type Email'}))

    class Meta:
        model = User
        fields = ('email',)


class EditForm(UserChangeForm):
    password = None

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email')

    def edit(self, fields):
        user = super(EditForm, self).save(commit=False)

        if user.commit:
            user.save()
        return user
设置.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# sending an email
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'medoabdin@gmail.com'
EMAIL_HOST_PASSWORD = 'medo_rko96'
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False
models.py

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    overview = models.TextField(editable=True, help_text="This field is important to make the viewers know you and your experience")
    city = models.CharField(max_length=20)
    phone = models.IntegerField(default=0)
    logo = models.ImageField()

    def __str__(self):
        return self.user.username


def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = UserProfile.objects.create(user=kwargs['instance'])


post_save.connect(receiver=create_profile, sender=User)

用户使用
在您的方法
发送邮件
中尝试catch
,并使用
获取
更改
过滤器
,如下面的一行

user = User.objects.get(email=str(request.POST['email']))
Get方法将尝试查找用户,如果在数据库中找不到,则会引发
user.DoesNotExist
exception您可以捕获它并执行任何您想要的操作

比如:-

def send_mail(self, request, **kwargs):
    subject = "Complete the modification of the password form"
    message = "please check here"

    if request.method == "POST":
        try:
            user = User.objects.get(email=str(request.POST['email']))
            recipient = str(request.POST.get(kwargs['Email']))
            if user.is_active and subject and message and recipient:
                send_mail(subject=subject,
                          message=message,
                          from_email=settings.EMAIL_HOST,
                          auth_user=request.user.email,
                          auth_password=request.user.password,
                          recipient_list=[recipient],
                          fail_silently=False)
            return render(request, self.template_name)
        except user.DoesNotExist:
            return redirect('account:password-reset')

错误是什么?请指定您的问题。不要出错。当我使用以下代码时:if user.exists():,它不起作用。如何检查电子邮件是否有效或存在?结果是相同的@Ansh JDo您的数据库中有用户吗?你能分享这个例子吗,比如你把什么样的数据放进了电子邮件,并查看了数据库。数据库中的值是多少。我确实编辑了我的帖子。我向您提供了关于我的项目的所有信息,我也向您提供了数据库的屏幕截图。您能告诉我您从下面得到了什么吗:-
user=user.objects.get(email=str(request.POST['email'))
您可以使用调试器
导入pdb;pdb.set_trace()
AnonymousUser是django中的有效用户,您需要设置一个条件来检查not AnonymousUser。比如'if not user.is_anonymous:'或者您可以检查user.is_active for AnonymousUser它将始终为false。