【问题标题】:Can't send email with Django celery无法使用 Django celery 发送电子邮件
【发布时间】:2017-12-01 13:38:24
【问题描述】:

我正在尝试使用 Celery 和 RabbitMQ 在我的 django 项目中发送电子邮件。 这是我在 GitHub 上的项目https://github.com/Loctarogar/Django-by-Example。 在我的 tasks.py 文件中输入了 admin@myshop.com,但我尝试将其更改为我真正的 google 邮件,但没有任何效果。

每次出现此错误时:

[2017-11-20 20:09:36,747: ERROR/ForkPoolWorker-4] Task orders.tasks.order_created[a8fe13ed-08dc-4971-82ff-f184e197ab8d] raised unexpected: ConnectionRefusedError(111, 'Connection refused')
Traceback (most recent call last):
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/celery/app/trace.py", line 374, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/celery/app/trace.py", line 629, in __protected_call__
    return self.run(*args, **kwargs)
  File "/home/morilon/dj/shop/myshop/orders/tasks.py", line 14, in order_created
    mail_sent = send_mail(subject, message, 'admin@myshop.com', [order.email])
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/django/core/mail/__init__.py", line 62, in send_mail
    return mail.send()
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/django/core/mail/message.py", line 348, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/django/core/mail/backends/smtp.py", line 104, in send_messages
    new_conn_created = self.open()
  File "/home/morilon/dj/shop/lib/python3.5/site-packages/django/core/mail/backends/smtp.py", line 64, in open
    self.connection = self.connection_class(self.host, self.port, **connection_params)
  File "/usr/lib/python3.5/smtplib.py", line 251, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python3.5/smtplib.py", line 335, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "/usr/lib/python3.5/smtplib.py", line 306, in _get_socket
    self.source_address)
  File "/usr/lib/python3.5/socket.py", line 711, in create_connection
    raise err
  File "/usr/lib/python3.5/socket.py", line 702, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused

【问题讨论】:

    标签: python django email


    【解决方案1】:

    我遇到了完全相同的问题,但我通过设置我的 settings.py 解决了它,就像 skulegirl 说的那样,只需将它添加到我的 settings.py 中

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

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      您的代码仓库配置为使用控制台后端来发送电子邮件,但您的回溯显示正在使用 smtp 后端。我假设您已经更改了后端,这就是导致错误的原因。

      默认情况下,smtp 后端会在 localhost 上查找 smtp 服务器。我猜你那里没有一个在运行。

      如果您想通过 gmail 的 smtp 服务器发送,您可以这样做,您只需在 settings.py 文件中配置适当的设置。 See the django docs for what needs to be configured。阅读 gmail 文档以了解要使用的确切 smtp 主机地址。

      【讨论】:

      • 嗨,你有一些 django 项目的例子吗?那对我很有帮助。现在我正在处理这个错误,但我想知道如何向真实的人发送电子邮件。
      • 您遇到的错误完全与使用 celery 无关。您的 repo 中的配置看起来不错,只需确保将所需的 smtp 主机信息添加到您的 settings.conf 文件中,然后无论是通过 celery 还是直接从您的应用程序,您都应该能够发送邮件。
      猜你喜欢
      • 2019-06-04
      • 2018-10-19
      • 2013-06-07
      • 2018-01-20
      • 1970-01-01
      • 2021-10-15
      • 2015-06-08
      • 1970-01-01
      • 2016-09-28
      相关资源
      最近更新 更多