Django sending email

匿名 (未验证) 提交于 2019-12-03 02:06:01

问题:

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 = "myemail@gmail.com" 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', 'myemail@gmail.com', ['myemail@gmail.com']) Traceback (most recent call last):   File "", line 1, in    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.

回答1:

Are you trying to use a gmail account? Maybe try this then:

EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'your-username@gmail.com' EMAIL_HOST_PASSWORD = 'your-password' EMAIL_PORT = 587 EMAIL_USE_TLS = True 

Then try test (django

python manage.py shell >>> from django.core.mail import send_mail >>> send_mail('test email', 'hello world', to=['test@email.com']) 

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', 'your@email.com', ['test@email.com']) 

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



回答2:

First Create an Application specific password

  1. Visit your Google Account security page.
  2. In the 2-Step Verification box, click Settings(if there is no settings link, you may want to create a new one. you can skip step 3 & 4).
  3. Click the tab for App-specific passwords.
  4. Click Manage your application specific passwords.
  5. Under the Application-specific passwords section, enter a descriptive name for the application you want to authorize, such as "Django gmail" then click Generate application-specific password button.
  6. note down the password. for example: smbumqjiurmqrywn

Then add the appropriate values to settings.py:

EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'your-username@gmail.com' 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', 'your@email.com', ['toemail@email.com'],      fail_silently=False) 


回答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=['test@email.com']) 

use

send_mail('test email', 'hello world', 'your@email.com', ['test@email.com']) 

The first four arguments are required: subject, message, from_email, and recipient_list.



回答4:

  1. Enable pop3 in gmail settings.
  2. create application specific password for this django application. (http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833)


回答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.



回答6:

In settings.py, Use smtp as backend and not console

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 


回答7:

put the following minimal settings in the settings.py or local_settings.py file on your server.

EMAIL_HOST = 'localhost' EMAIL_PORT = 587 EMAIL_USE_TLS = True 

instead of using smtp.gmail.com which imposes lot many limitations, you can have your own mail server.

you can do it by installing your own mailserver:

sudo apt-get install sendmail 


文章来源: Django sending email
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!