This is my settings.py:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com' # mail service smtp
EMAIL_HOST_USER = 'xx#xx.com' # email id
EMAIL_HOST_PASSWORD = 'sdjlfkjdskjfdsjkjfkds' #password
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'xx#xx.com'
I am sending password reset email
It works fine on localhost but on production server as sender I get webmaster#localhost
What do I do?
This is my urls.py
url(r'^password_reset/$', auth_views.PasswordResetView.as_view(
template_name='accounts/password_reset.html',
email_template_name = 'accounts/email/password_reset.html',
html_email_template_name = 'accounts/email/password_reset.html',
subject_template_name = 'accounts/email/password_reset_subject.html'),
First I want to explain why you get specifically webmaster#localhost email.
Explanation
django.contrib.auth.forms.PasswordResetForm.save() function uses None as a from email address, webmaster#localhost is used by default, so you should just need to add DEFAULT_FROM_EMAIL property to your settings.py.
Solution
Connect to your production enviroment and run the django shell with python manage.py shell.
Now run the following commands.
# Check your enviroment, should say something like production.
import os
os.environ.get('DJANGO_SETTINGS_MODULE')
# Check if the DEFAULT_FROM_EMAIL property is set.
from django.conf import settings
settings.DEFAULT_FROM_EMAIL
With os.environ.get('DJANGO_SETTINGS_MODULE') you will get the settings file you are using for production, so if settings.DEFAULT_FROM_EMAIL isn't set just edit that file and add it with your email.
Recomendations
Use another email backend (mandrill, sendgrid, etc...) to ensure that your mails will reach the inbox and not the spam folder.
For this you can use django-anymail package.
References
How to create a password reset view in Django - simpleisbetterthancomplex.com
Related
My Django app is able to log in into my Gmail account, but it is not sending emails.
I know it logged in because I tried sending an email to a non-existing email-address and Gmail gave me this error.
Even looked in my spam folders but nothing :(
However, when I manually send an email, it works properly.
This is my SMTP configuration in settings.py
settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
I even tried hard-coding and changing the sender's email, but still no result.
I wasn't getting this error a few days before, but for some reason it does seem to be working now.
By the way, I'm using this for password reset functionality.
I've followed multiple sources on how to set this up. Now everything seems working (no error) but I just don't see the email.
gmail - Allow less secure apps: ON
url.py
path('pw_reset/', auth_views.PasswordResetView.as_view(template_name="authacc/pw_reset.html"), name="reset_password"),
path('pw_done/', auth_views.PasswordResetDoneView.as_view(template_name="authacc/pw_done.html"), name="password_reset_done"),
path('pw_confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name="authacc/pw_confirm.html"), name="password_reset_confirm"),
path('pw_complete/', auth_views.PasswordResetCompleteView.as_view(template_name="authacc/pw_complete.html"), name="password_reset_complete"),
settings.py
#SMTP Configuration
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = env('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = env('EMAIL_HOST_PASSWORD')
What I've tried...
use debuggingserver to check the email locally.
settings.py
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
cmd
python -m smtpd -n -c DebuggingServer localhost:1025
I can see the "Password reset sent" page, but no email is generated. So I suspect there's something wrong with the default PasswordResetView?
Probably similar problem, but unresolved:
Reset password emails in Django
The code was fine. Something was off with the email formatting. I didn't experiment enough, but ".com" ending seems fine, ".me" isn't.
I have a Docker container where I am trying to send an email via Django.
I have a separate email server on another domain that I want to use for this purpose. I have other applications connect with it with no problem.
My Django production email setup looks like this (I intend to replace username and password with Kubernetes secrets in the future, but for testing I am just putting them inside the file):
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'mail.mydomain.io'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = "<username>"
EMAIL_HOST_PASSWORD = "<password>"
In my module, I have the following code:
from rest_framework.views import APIView
from django.core.mail import send_mail
class MailView(APIView):
def post(self, request):
subject = request.data.get("subject")
message = request.data.get("message")
sender = request.data.get("sender")
receipients = request.data.get("receipients")
send_mail(subject,message,sender,receipients,fail_silently=False,)
... more
This works locally, however when I try to run it inside the container, I get the following error:
smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.
Do I need to install some sort of SMTP relay or server to my Docker container?
My Docker container is based on the python:3.7 container and I am not currently installing any SMTP extensions or anything to it.
EMAIL_USE_TLS needs to be set to True
EMAIL_USE_TLS = True
I set up everything as the Django documentation but when I test sending an email.It works but When I check my inbox I find out that I sent and revived from to the same email address.
Here is the settings.py
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.gmail.com"
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = "myemail#gmail.com"
EMAIL_HOST_PASSWORD = "mypassword"
And the views.py
...
send_mail( 'subject', 'message', 'user#gmail.com', ['myemail#gmail.com',], fail_silently=False, )
...
But I received an email from myemail#gmail.com to me(myemail#gmail.com).
Im not sure if you did this already but if youre using gmail then you will need to do the following.
Sign in to your Google Admin console (Sign in using an administrator account)
Click Security > Less secure apps.
Select Allow users to manage their access to less secure apps.
Click Save.25
Also you should use environment variables for the email address if you are live already eg:
EMAIL_HOST_USER = os.environ.get('MY_EMAIL_USER')
EMAIL_HOST_PASSWORD = os.environ.get('MY_EMAIL_PASS')
If its all working and you are just getting the mail to the wrong address can you send on the document you followed?
In terms of you settings.py that looks fine to me.
I'm trying to send email using smtp.gmail.com in Django project.
This is my email settings.
settings.py
# Email Settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = 'myaccount#gmail.com'
EMAIL_HOST_PASSWORD = 'mygooglepassword'
views.py
...
send_mail( "message title",
"message content",
"myaccount#gmail.com",
["myaccount#hotmail.com"],
fail_silently=False)
Whenever I try to send email, I get this error
gaierror at /contact-us/
[Errno-2] Name or service not known
I tried the followings.
I set my google account's less secure app access on.
I unchecked avast antivirus setting 'Setting->Protection->Core Shields->Mail Shield->Scan outbound emails(SMTP)'
Tried different ports in email settings. 587 and 25
Switched the ssl and tls in email settings.
But it's not sending yet. When I use 'django.core.mail.backends.console.EmailBackend' instead of 'django.core.mail.backends.smtp.EmailBackend', it prints email on console.
I double checked my gmail username and password on settings.
Please help me.
Thank you.
You may need to do some configuration on Google side.
Reference answer::
Go to your Google Account settings, find Security -> Account permissions -> Access for less secure apps, enable this option.
https://accounts.google.com/DisplayUnlockCaptcha