Кто-нибудь может подсказать, как отправить электронное письмо с send_mail?Это не работает - PullRequest
1 голос
/ 24 марта 2019

Когда пользователь регистрируется, is_active по умолчанию имеет значение False. Я хочу, чтобы пользователь получил уведомление по электронной почте, когда администратор активирует пользователя. Но send_mail не отправляет электронную почту.

Я создал функцию в моем views.py:

def send_mail(request):
    if user.is_active == True:
        send_mail(request, subject='subject',
          message='message',
          from_email='hekevintran_test@webfaction.com',
          recipient_list=['recipient@yahoo.com'],
          fail_silently=False)

Кроме того, я записал эти вещи в моих настройках.

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'ualmaz'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 25
EMAIL_USE_TLS = False

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_FILE_PATH = os.path.join(BASE_DIR, 'apps', 'emails')

Вот мои взгляды.py:

from django.shortcuts import render, redirect
from django.contrib import messages
from django.core.mail import send_mail
from django.urls import reverse_lazy
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import CreateView, DetailView, ListView, UpdateView, DeleteView
from .forms import UserCreationModelForm, UserUpdateForm, ProfileUpdateForm
from .models import User, Post, Profile

class UserRegistrationView(CreateView):
    form_class = UserCreationModelForm
    user = User
    success_url = reverse_lazy('login')
    template_name = 'users/registration.html'

def send_mail(request):
    user = User
    if user.is_active == True:
        send_mail(request, subject='subject',
          message='message',
          from_email='hekevintran_test@webfaction.com',
          recipient_list=['recipient@yahoo.com'],
          fail_silently=False)

Вот моя модель пользователя в models.py:

.
class User(AbstractUser):
    first_name = models.CharField(verbose_name="First name", max_length=255)
    last_name = models.CharField(verbose_name="Last name", max_length=255)
    country = models.CharField(verbose_name="Country name", max_length=255)
    city = models.CharField(verbose_name="City name", max_length=255)
    email = models.EmailField(verbose_name="Email", max_length=255)
    access_challenge = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)

    def __str__(self):
        return self.username

Есть идеи?

1 Ответ

0 голосов
/ 26 марта 2019

Вот как это решено.

from django.dispatch import receiver
from django.db.models.signals import pre_save, post_save
from django.conf import settings
from django.core.mail import send_mail


#signal used for is_active=False to is_active=True
@receiver(pre_save, sender=User, dispatch_uid='active')
def active(sender, instance, **kwargs):
    try:
        if instance.is_active and User.objects.filter(pk=instance.pk, is_active=False).exists():
            subject = 'Your account is activated'
            mesagge = '%s your account is now active' %(instance.first_name)
            from_email = settings.EMAIL_HOST_USER
            send_mail(subject, mesagge, from_email, [instance.email], fail_silently=False)
    except:
        print("Something went wrong, please try again.")


#signal to send an email to the admin when a user creates a new account
@receiver(post_save, sender=User, dispatch_uid='register')
def register(sender, instance, **kwargs):
    try:
        if kwargs.get('created', False):
            subject = "Verificatión of the %s 's account" %(instance.username)
            mesagge = '%s, %s just registered in locator' %(instance.first_name, instance.last_name)
            from_email = settings.EMAIL_HOST_USER
            send_mail(subject, mesagge, from_email, [from_email], fail_silently=False)
    except:
        print("Something went wrong, please try again.")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...