Django sending email
Solution 1
Are you trying to use a gmail account? Maybe try this then:
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'your-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Then try test (django < 1.4) by
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test email', 'hello world', to=['[email protected]'])
And if you use django 1.4 use this:
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])
If you're not using a gmail account and still getting problems then just try add the EMAIL_HOST_USER
and EMAIL_HOST_PASSWORD
to what you have.
If you still have issues maybe your network is blocking you. Firewalls on your OS or router.
Thanks to knite for the updated syntax. Throw him a +1 and thanks to pranavk for letting me know about the syntax change in django 1.4
Solution 2
First Create an Application specific password
- Visit your Google Account security page. And Click 2-step verification:
- Click
App passwords
at Google Account security page:
Then add the appropriate values to settings.py:
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'Application spectific password(for eg: smbumqjiurmqrywn)'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
You can use the shell to test it:
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('Test', 'This is a test', '[email protected]', ['[email protected]'],
fail_silently=False)
Solution 3
@mongoose_za has a great answer, but the syntax is a bit different in Django 1.4+.
Instead of:
send_mail('test email', 'hello world', to=['[email protected]'])
use
send_mail('test email', 'hello world', '[email protected]', ['[email protected]'])
The first four arguments are required: subject, message, from_email, and recipient_list.
Solution 4
- Enable pop3 in gmail settings.
- create application specific password for this django application. (http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833)
Solution 5
I would avoid using GMail. It will work for a few emails, but after that, you may find that all your emails are being rejected or spam-canned. I used Amazon's "SES" service with Django-SES to solve this.
Luke
I'm a Rails developer and love using coffeescript, angularjs, handlebars, etc. with my apps! I've also built a social network with Django.
Updated on January 28, 2022Comments
-
Luke about 2 years
I know there are 20 questions similar to mine but I've tried for over a day now to get email to work with Django.
I'm getting this error:
[Errno 111] Connection refused
when I attempt to send an emailThis is where I create the email and attempt to send it in my view:
try: msg = EmailMessage(subject, message, from_email, [receiver]) msg.content_subtype = "html" msg.send()
My settings file is as follows:
EMAIL_HOST = "localhost" DEFAULT_FROM_EMAIL = "[email protected]" EMAIL_PORT = 25 EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
I've tried doing test sending using
python -m smtpd -n -c DebuggingServer localhost:1025
and had success, but when it comes down to doing it for real, no success.When I try doing a send_mail from the shell I get this traceback:
>>> from django.core.mail import send_mail >>> send_mail('Test', 'Test', '[email protected]', ['[email protected]']) Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/local/lib/python2.6/dist-packages/django/core/mail/__init__.py", line 61, in send_mail connection=connection).send() File "/usr/local/lib/python2.6/dist-packages/django/core/mail/message.py", line 251, in send return self.get_connection(fail_silently).send_messages([self]) File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 79, in send_messages new_conn_created = self.open() File "/usr/local/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 42, in open local_hostname=DNS_NAME.get_fqdn()) File "/usr/lib/python2.6/smtplib.py", line 239, in __init__ (code, msg) = self.connect(host, port) File "/usr/lib/python2.6/smtplib.py", line 295, in connect self.sock = self._get_socket(host, port, self.timeout) File "/usr/lib/python2.6/smtplib.py", line 273, in _get_socket return socket.create_connection((port, host), timeout) File "/usr/lib/python2.6/socket.py", line 561, in create_connection raise error, msg error: [Errno 111] Connection refused
I just don't seem to be getting anywhere with this. Any help or advice would be much appreciated. Thanks
Also, if there is something else you'd like to see, just comment about it.
-
Luke over 12 yearsI've been trying to send email through my local server. But going through gmail works too I guess. Thanks
-
Sam Stoelinga about 12 yearsRecently started using SendGrid which is also a great service.
-
pranavk almost 12 yearsare you sure that EMAIL_HOST_USER includes gmail also, shouldn't it be just the 'username' ?
-
pranavk almost 12 yearsmoreover, it seems that send_mail syntax has slightly changed now in the latest django version, now four arguments are expected instead of 3.
-
Ryan Jenkins over 11 years@pranavk Yes, Google specifies that using your full email address (including the @gmail.com) is required, most likely because they serve other domains through their Apps program.
-
mariowise over 9 yearsIt works from the shell, but when I use this code from view, It doesn't. Any ideas ??
-
toothie over 9 yearsI have used postfix instead of sendmail and same settings as above, but, the email is not sent.
-
e18r about 8 years@toothie I had the same problem until I realized I had not really installed postfix on my production server...
-
Julio Marins about 8 yearsfor Digital ocean users, they blocks STMP ports by default stackoverflow.com/questions/27106336/…
-
randalv almost 8 yearsSadly, app-specific passwords do not appear to be available for Google for Business gmail accounts. I get this error when I attempt to go directly to the App specific passwords page (security.google.com/settings/u/3/security/apppasswords) : The setting you are looking for is not available for your account.
-
suhailvs about 5 yearshere is updated doc