Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django sending email

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 email

This 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.

like image 820
Luke Avatar asked Aug 02 '11 15:08

Luke


People also ask

How do I send and receive emails in Django?

Use the get_new_mail method to collect new messages from the server. Go to Django Admin, then to 'Mailboxes' page, check all the mailboxes you need to receive emails from. At the top of the list with mailboxes, choose the action selector 'Get new mail' and click 'Go'.

How do I send multiple emails in Django?

How to send multiple mass emails django. We need to create a Tuple of messages and send them using send mass mail. In this tutorial, we create a project which sends email using Django. We fill the data in the form and send it using Django Email.

How do I send a message in Django?

To add a message, call: from django. contrib import messages messages. add_message(request, messages.INFO, 'Hello world.


2 Answers

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

like image 95
darren Avatar answered Sep 20 '22 01:09

darren


First Create an Application specific password

  1. Visit your Google Account security page. And Click 2-step verification: enter image description here

  1. Click App passwords at Google Account security page: enter image description here

  1. Create an App, select Mail and give a name: enter image description here

  1. Note down the App Password: enter image description here

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) 
like image 22
suhailvs Avatar answered Sep 20 '22 01:09

suhailvs