Ответить на введенное письмо Django - PullRequest
0 голосов
/ 13 января 2020

У меня есть контактная форма на моем веб-сайте, и она работает, но в настройках электронной почты я использую адрес электронной почты stati c и wi sh, чтобы использовать вместо этого адрес электронной почты, введенный в поле электронной почты.

Данные, извлеченные из формы, выглядят следующим образом

{'from_email': 'example@gmail.com', 'subject': 'Hello World', 'message': 'asdasdasd'}

Мой импорт в моем файле view.py

from django.http import HttpResponse
from django.shortcuts import render
from django.views import View
from django.http import JsonResponse
from django.conf import settings
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, redirect
from .forms import ContactForm
from django.core.mail import EmailMessage

Представление класса выглядит следующим образом


class ContactMe(View):
    template = "contact.html"
    context = {
        'form': ContactForm()
    }

    def get(self, request):
        print("getting form")
        return render(request, self.template, self.context)

    def post(self, request):
        form = ContactForm(request.POST)

        def __init__(self):
            self.mailSender = mailSender()
            Mail = POST
            Mail.MailSender.send_mail()
        if form.is_valid():
            data = form.cleaned_data
            print(data)
            send_mail(data['subject'], data['message'],
                      settings.EMAIL_HOST_USER, data['from_email'])
     next = request.POST.get('next', '/')
            return HttpResponseRedirect(next)`

данные ['from_email'] были настроены на мою электронную почту ['example@gmail.com'], и я изменил их на имя метки в данных, которые они получают ('from_email')

Это работает 100% с сообщением stati c вместо переменной form_email, но использование form_email выдает ошибку

TypeError: аргумент "to" должен быть списком или кортежем

Затем я изменил его на

to=['from_email']

но потом я получил эту ошибку TypeError: send_mail () получил неожиданный аргумент ключевого слова 'to'

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

Любые идеи?

Кин d С уважением,

1 Ответ

2 голосов
/ 13 января 2020

Вы не можете подделать адрес «от» электронного письма, пытаясь установить его на data['from_email'], что недопустимо большинством SMTP-провайдеров (они заменят его реальным «от»). ). Но вы можете установить адрес для ответа (который будет отображаться в вашем почтовом клиенте и позволит быстро ответить на правильный адрес).

Для этого вместо использования send_mail(), создайте EmailMessage или EmailMultiAlternatives, установите адрес reply_to и send() it:

from django.core.mail import EmailMultiAlternatives

message = EmailMultiAlternatives(
    data['subject'], 
    data['message'], 
    to=["support@example.com"],  # where you receive the contact emails  
    from_email=settings.EMAIL_HOST_USER,
    reply_to=[data['from_email']])
message.send()
...