Django发送电子邮件

我知道有20个类似于我的问题,但我已经尝试了一天以上,让电子邮件与Django一起工作。

我得到这个错误: [Errno 111] Connection refused当我试图发送电子邮件时[Errno 111] Connection refused

这是我创build电子邮件的地方,并尝试在我的视图中发送:

 try: msg = EmailMessage(subject, message, from_email, [receiver]) msg.content_subtype = "html" msg.send() 

我的设置文件如下:

 EMAIL_HOST = "localhost" DEFAULT_FROM_EMAIL = "myemail@gmail.com" EMAIL_PORT = 25 EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" 

我已经尝试使用python -m smtpd -n -c DebuggingServer localhost:1025进行testing发送,并且已经成功了,但是到了真正实现它的时候,却没有成功。

当我尝试从shell中做一个send_mail时,我得到这个回溯:

 >>> from django.core.mail import send_mail >>> send_mail('Test', 'Test', 'myemail@gmail.com', ['myemail@gmail.com']) 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 

我似乎没有得到任何与此。 任何帮助或build议将不胜感激。 谢谢

另外,如果还有其他的东西你可以看看,只需要评论一下。

你想使用Gmail帐户? 也许试试这个:

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

然后试试(django <1.4)

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

如果你使用django 1.4,使用这个:

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

如果您没有使用Gmail帐户,但仍然遇到问题,只需将EMAIL_HOST_USEREMAIL_HOST_PASSWORD添加到您的EMAIL_HOST_PASSWORD即可。 如果你仍然有问题,也许你的networking阻止你。 您的操作系统或路由器上的防火墙。

感谢knite更新的语法。 扔他+1,并感谢pranavk让我知道django 1.4语法的变化

首先创build一个应用程序专用密码

  1. 访问您的Google帐户安全页面 。
  2. 在“ 2-Step Verification框中,点击Settings (如果没有设置链接,则可能需要创build一个新链接,可以跳过第3步和第4步)。
  3. 点击App-specific passwords标签。
  4. 点击Manage your application specific passwords
  5. Application-specific passwordsApplication-specific passwords部分下,input要授权的应用程序的描述性名称,例如“Django gmail”,然后单击Generate application-specific passwordbutton。
  6. 记下密码。 例如: smbumqjiurmqrywn 密码

然后将相应的值添加到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 

你可以使用shell来testing它:

 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) 

@mongoose_za有一个很好的答案,但是在Django 1.4+中语法有点不同。

代替:

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

使用

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

前四个参数是必需的:subject,message,from_email和recipient_list。

  1. 在Gmail设置中启用pop3。
  2. 为这个Django应用程序创build应用程序特定的密码。 (http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833);

我会避免使用GMail。 它可以用于几封电子邮件,但在此之后,您可能会发现所有的电子邮件都被拒绝或垃圾邮件。 我用Django-SES使用Amazon的“SES”服务来解决这个问题。

在settings.py中,使用smtp作为后端,而不是控制台

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

将以下最小设置放在服务器上的settings.py或local_settings.py文件中。

 EMAIL_HOST = 'localhost' EMAIL_PORT = 587 EMAIL_USE_TLS = True 

而不是使用smtp.gmail.com这有很多限制,你可以有你自己的邮件服务器。

你可以通过安装你自己的mailserver来完成:

 sudo apt-get install sendmail