Как отправить почту выбранным пользователям - PullRequest
0 голосов
/ 21 октября 2019

Здесь у меня есть представление, которое либо отправляет электронную почту выбранным пользователям, либо удаляет выбранных пользователей. Удаление выбранных пользователей работает нормально, но отправка электронной почты выбранным пользователям не работает. Я попробовал эти способы отправки электронной почты на выбранную почту. с первым подходом

Exception Type: AttributeError
Exception Value:    
'str' object has no attribute 'email'

, а также я хочу удалить выбранных пользователей из сеанса, если электронное письмо отправляется пользователям, и перезапустить сеанс снова, чего здесь не происходит с этим кодом

Со вторымподход говорит: invalid email address.

первый подход

def selected_users(request):
    selected_users = get_user_model().objects.filter(id__in=request.POST.getlist('users'))

#tring to store selected users in session
    initial = {'users':[]}
    session = request.session.get('users',initial)
    if selected_users:
        for user in selected_users:
            session['users'].append(user.email)
            request.session['users'] = session
            print('hello',request.session['users']) # here i want to restart session either email sends or not to the user
    if selected_users and  request.method == 'POST' and 'delete_selected' in request.POST:
            selected_users.delete()
            messages.success(request, 'deleted')
            return redirect('view_users')
    elif request.method == 'POST' and 'mail_selected' in request.POST:
            form = SendMailForm(request.POST or None)
            config = EmailConfiguration.objects.order_by('-date').first()
            backend = EmailBackend(host=config.email_host, port=config.email_port, username=config.email_host_user,
                                   password=config.email_host_password, use_tls=config.email_use_tls)
            if form.is_valid():
                sub = form.cleaned_data['sub']
                msg = form.cleaned_data['msg']
                for user in request.session['users']:
                    email = EmailMessage(subject=sub, body=msg, from_email=config.email_host_user, to=[user.email],
                                             connection=backend)
                    email.send()
                    messages.success(request, 'Your mail sent.')
                    return redirect('view_users')

            return render(request, 'send_mail_selected.html', {'users': selected_users,'form':form})

    else:
            messages.error(request, 'Invalid request')
            return redirect('view_users')

второй подход

шаблон

<form method="POST" >
    {% csrf_token %}
<p><label>To</label> <input type="text" value="{% for user in users %}{{user.email}}{% endfor %}"></p>

<p><label>Subject</label> <input type="text" name="sub" ></p>
<p><label>Message</label> <textarea name="msg" rows="10"></textarea></p>
<button type="submit" class="btn btn-primary" name="mail_selected">Send </button>

</form>

views.py

            if form.is_valid():
                sub = form.cleaned_data['sub']
                msg = form.cleaned_data['msg']
                to = form.cleaned_data['to']
                email = EmailMessage(subject=sub, body=msg, from_email=config.email_host_user, to=to,
                                             connection=backend)
                email.send()
                messages.success(request, 'Your mail sent.')
                return redirect('view_users')

            return render(request, 'send_mail_selected.html', {'users': selected_users,'form':form})

forms.py

class SendMailForm(forms.Form):
    to = forms.EmailField(required=False)
    sub = forms.CharField(max_length=250)
    msg = forms.CharField(widget=forms.Textarea)

1 Ответ

1 голос
/ 21 октября 2019

Вы сохранили в списке адреса электронной почты, а не объекты пользователя. Поэтому вы должны использовать их напрямую:

for email in request.session['users']:
    email = EmailMessage(subject=sub, body=msg, from_email=config.email_host_user, to=[email], connection=backend)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...