Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django发送电子邮件_Python_Django_Smtp - Fatal编程技术网

Python Django发送电子邮件

Python Django发送电子邮件,python,django,smtp,Python,Django,Smtp,我知道有20个问题与我的问题类似,但我已经尝试了一天多的时间来获取电子邮件与Django合作 我收到以下错误:[Errno 111]当我尝试发送电子邮件时,连接被拒绝 这是我创建电子邮件并尝试在我的视图中发送它的地方: try: msg = EmailMessage(subject, message, from_email, [receiver]) msg.content_subtype = "html" msg.send() 我的设置文件如下: EMAIL_HOST

我知道有20个问题与我的问题类似,但我已经尝试了一天多的时间来获取电子邮件与Django合作

我收到以下错误:
[Errno 111]当我尝试发送电子邮件时,连接被拒绝

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

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-MSMTPD-n-c调试服务器localhost:1025进行测试发送,并取得了成功,但当涉及到实际操作时,没有成功

当我尝试从shell发送邮件时,我得到以下回溯:

>>> 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
>>从django.core.mail导入发送\u邮件
>>>发送邮件('测试','测试','myemail@gmail.com', ['myemail@gmail.com'])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.6/dist-packages/django/core/mail/__-init__.py”,第61行,在发送邮件中
连接=连接)。发送()
文件“/usr/local/lib/python2.6/dist packages/django/core/mail/message.py”,第251行,在send中
返回self.get\u连接(以静默方式失败)。发送消息([self])
文件“/usr/local/lib/python2.6/dist packages/django/core/mail/backends/smtp.py”,第79行,在send_messages中
新建连接创建=self.open()
文件“/usr/local/lib/python2.6/dist packages/django/core/mail/backends/smtp.py”,第42行,打开
本地\u主机名=DNS\u名称。获取\u fqdn()
文件“/usr/lib/python2.6/smtplib.py”,第239行,在__
(代码,消息)=自连接(主机,端口)
文件“/usr/lib/python2.6/smtplib.py”,第295行,在connect中
self.sock=self.\u获取\u套接字(主机、端口、self.timeout)
文件“/usr/lib/python2.6/smtplib.py”,第273行,在get套接字中
返回套接字。创建_连接((端口、主机),超时)
文件“/usr/lib/python2.6/socket.py”,第561行,在create_connection中
引发错误,msg
错误:[Errno 111]连接被拒绝
我只是觉得这件事没什么进展。任何帮助或建议都将不胜感激。谢谢


另外,如果您还想看其他内容,请发表评论。

您是否正在尝试使用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)

如果您使用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帐户,但仍然遇到问题,那么只需尝试将
电子邮件主机用户
电子邮件主机密码
添加到您的帐户中即可。 如果您仍然有问题,可能是您的网络阻止了您。操作系统或路由器上的防火墙


感谢pranavk让我知道django 1.4中的语法变化,我将避免使用GMail。这将适用于一些电子邮件,但在那之后,你可能会发现你所有的电子邮件都被拒绝或垃圾邮件罐头。我使用亚马逊的“SES”服务和Django SES解决了这个问题。

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

EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
你可以拥有自己的邮件服务器,而不是使用smtp.gmail.com,因为smtp.gmail.com有很多限制

您可以通过安装自己的邮件服务器来实现:

sudo apt-get install sendmail

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

而不是:

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

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

  • 在gmail设置中启用pop3
  • 为此django应用程序创建特定于应用程序的密码。(http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833)
  • 首先创建一个特定于应用程序的密码
  • 访问您的网站。然后单击两步验证:

  • 单击以下位置的应用程序密码:

  • 创建一个
    应用程序
    ,选择
    邮件
    ,并给出一个名称:

  • 记下
    应用程序密码
  • 然后将适当的值添加到settings.py: 您可以使用shell对其进行测试:
    在settings.py中,使用smtp作为后端,而不是控制台

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

    我一直试图通过本地服务器发送电子邮件。但我想,通过gmail也能奏效。谢谢你确定EMAIL\u HOST\u用户也包括gmail吗,不应该只是“用户名”吗?而且,在最新的django版本中,send\u mail语法似乎有了一些变化,现在需要四个参数,而不是三个。@pranavk是的,Google指定需要使用(包括@gmail.com),最有可能是因为他们通过自己的应用程序为其他域提供服务。它在shell中工作,但当我从视图中使用此代码时,它就不工作了。有什么想法吗?最近开始使用SendGrid,这也是一项很好的服务。我使用了postfix而不是sendmail,设置与上面相同,但是电子邮件没有发送。@toothie我也遇到了同样的问题,直到我意识到我没有在我的生产服务器上安装postfix…很遗憾,应用程序特定的密码似乎不适用于谷歌的商业gmail帐户。当我尝试直接转到特定于应用程序的密码页()时,出现此错误:您正在查找的设置不适用于您的帐户。此处已更新
    send_mail('test email', 'hello world', 'your@email.com', ['test@email.com'])
    
    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
    
    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)
    
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'