Python Forum

Full Version: Django send email - email form
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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: [email protected]
Message: Hello

When I check my gmail account I got my message:

from Email: [email protected] - ?
to Email: [email protected]
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,
            ['[email protected]'],
            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 = '[email protected]'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
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)
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,
				'[email protected]',
				['[email protected]'],
				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. Smile