Django send email - email form - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Web Scraping & Web Development (https://python-forum.io/forum-13.html) +--- Thread: Django send email - email form (/thread-29738.html) |
Django send email - email form - Remek953 - Sep-17-2020 Hello, I created a contact form to send me an email when the user fills it out. Everything appears to be working, I get mail to my gmail but I get it from myself, not from filled "email form". For example I fill out my form in my website: Subject: TEST Email: test@gmail.com Message: Hello When I check my gmail account I got my message: from Email: admin@gmail.com - ? to Email: admin@gmail.com date: 17 Sep 2020, 14:05 subject: TEST mailed-by: gmail.com Message: Hello my forms: class EmailForm(forms.Form): subject = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Your subject'})) email = forms.EmailField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Your email'})) message = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Your message'}))my views: def contact(request): form = EmailForm() if request.method =="POST": form = EmailForm(request.POST) if form.is_valid(): subject = request.POST['subject'] message = request.POST['message'] email = request.POST['email'] send_mail( subject, message, email, ['admin@gmail.com'], fail_silently=False, ) context = {'subject':subject} return render(request, 'base/contact.html', context) context = {'form':form} return render(request, 'base/contact.html', context)my settings: EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'admin@gmail.com' EMAIL_HOST_PASSWORD = 'password' EMAIL_PORT = 587 EMAIL_USE_TLS = True RE: Django send email - email form - mlieqo - Sep-17-2020 It seems that the problem is in the google mail server, which is sneaky enough to always use EMAIL_HOST_USER (user that is used for authentication) instead of the from_email value.The solution is to use a different mail server like sendgun or mailgrid (haven't used any of those so don't know) RE: Django send email - email form - Remek953 - Sep-18-2020 Thanks for answer. I tried with yahoo but I got server error. So I change my views: def contact(request): form = EmailForm() if request.method =="POST": form = EmailForm(request.POST) if form.is_valid(): subject = request.POST['subject'] message = request.POST['message'] email = request.POST['email'] send_mail( subject, email +'\n\n'+ message, 'admin@gmail.com', ['admin@gmail.com'], fail_silently=False, ) context = {'subject':subject} return render(request, 'base/contact.html', context)Now, "sending mail" appears in my message. Maybe I don't want it, but it works. |