I have set up smtp with gmail. When I use send_mail the from email is not showing up in the account receiving the email.
Django settings.py
# DEFAULT_FROM_EMAIL = '[email protected]'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = '**********'
EMAIL_USE_TLS = True
Using
$ python manage.py shell
I send the mail as follows,
>>> from django.core.mail import send_mail
>>> send_mail('subject is', 'message is and is not 12342', '[email protected]', ['[email protected]'])
1
>>>
I am receiving this email in my gmail account, (which is the same gmail account used for the smtp), but the from email is showing up as the [email protected] and should be [email protected]
When you send emails through google's SMTP servers you cannot change the from email field. It uses the same address that you provided for authentication.
If you want to change it you have to use either your own mail server or one of the numerous mail apis/servers available. Sendgrid, MailGun etc come to mind.
I solved the problem using this view:
def contact(request):
form = ContactForm(data=request.POST or None)
if form.is_valid():
subject = form.cleaned_data['sujet']
message = form.cleaned_data['message']
sender = form.cleaned_data['envoyeur']
msg_mail = str(message) + " " + str(sender)
send_mail(sujet, msg_mail, sender, ['[email protected]'], fail_silently=False)
return render(request, 'blog/contact.html', locals())
I actually append the email of the sender to the message. You could even remove the sender argument from send_mail. You just have to make your EmailField mandatory to make sure you'll get the sender's email address.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With