21
votes

I've been trying to get django to work with gmail's smtp server to send mails but I always get this traceback. Any help will be most appreciated.

----- settings.py -----

EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = '[email protected]'

EMAIL_HOST_PASSWORD = 'your-password'

EMAIL_PORT = 587

EMAIL_USE_TLS = True

---- python shell -----

from django.core.mail import EmailMessage

email = EmailMessage('Mail Test', 'This is a test', to=['[email protected]'])

email.send()

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/fiodorovich/Envs/fdict/lib/python2.7/site-packages/django/core/mail/message.py", line 251, in send
return self.get_connection(fail_silently).send_messages([self])
File "/home/fiodorovich/Envs/fdict/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 86, in send_messages
sent = self._send(message)
File "/home/fiodorovich/Envs/fdict/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 104, in _send
email_message.message().as_string())
File "/usr/local/lib/python2.7/smtplib.py", line 701, in sendmail
raise SMTPSenderRefused(code, resp, from_addr)
SMTPSenderRefused: (530, '5.7.0 Must issue a STARTTLS command first. z15sm10449686anl.15', 'webmaster@localhost')

Edit: New errors when made the modification suggested by unni. The shell won't execute and I'm getting this error message

**EMAIL_HOST_USER  = '[email protected]'**
 ^
SyntaxError: invalid syntax
5
Is that a direct C+P of the settings? - Ignacio Vazquez-Abrams
well those aren't really the account name and password, but the rest is a C+p - la_f0ka
Do they show up when you start the Django REPL? - Ignacio Vazquez-Abrams
I am not sure how to test that, trying to figure out right now - la_f0ka
Start the shell, import django.conf.settings, and see if it exists. - Ignacio Vazquez-Abrams

5 Answers

9
votes

I have recently set this up and had a slightly different settings.py config.

Move:

EMAIL_USE_TLS = True 

to the top above EMAIL_HOST

Add:

DEFAULT_FROM_EMAIL = '[email protected]'
SERVER_EMAIL = '[email protected]'
16
votes

Change your settings like this :

EMAIL_HOST = 'smtp.gmail.com'

EMAIL_HOST_USER = 'user'

EMAIL_HOST_PASSWORD = 'your-password'

EMAIL_PORT = 587

EMAIL_USE_TLS = True

Then try:

python manage.py shell
>>> from django.core.mail import EmailMessage
>>> email = EmailMessage('Mail Test', 'This is a test', to=['[email protected]'])
>>> email.send()

This should return with the status 1, which means it worked.

7
votes

I had the same problem, and I searched for half a day to find a solution. Most of the proposed solutions are talking about where you should initialize EMAIL_USE_TLS in relation to the other settings. I don't think this is a solution for the problem.

I found the solution at: https://support.google.com/accounts/answer/185833?hl=en and finally https://security.google.com/settings/security/apppasswords

If you are testing your project on a local machine, you should go to the latter link, and enable "Access for less secure apps".

0
votes
EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend'
EMAIL_HOST='smtp.gmail.com'
EMAIL_PORT=465
EMAIL_HOST_USER = 'youruser'
EMAIL_HOST_PASSWORD = '*********'
DEFAULT_EMAIL_FROM = '[email protected]'

works fine

0
votes

you have to go to this link https://www.google.com/settings/u/2/security/lesssecureapps?pageId=none and turn on the access for less secure apps

this option allows django to access your email and send email via it .