Django 发送电子邮件

2025-03-21 09:05:00
admin
原创
37
摘要:问题描述:我知道有 20 个问题与我的问题类似,但我已经尝试了一天多的时间让电子邮件与 Django 协同工作。我收到此错误:[Errno 111] Connection refused当我尝试发送电子邮件时这是我创建电子邮件并尝试在我的视图中发送它的地方:try: msg = EmailMessag...

问题描述:

我知道有 20 个问题与我的问题类似,但我已经尝试了一天多的时间让电子邮件与 Django 协同工作。

我收到此错误:[Errno 111] Connection refused当我尝试发送电子邮件时

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

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并取得了成功,但当真正进行操作时,却没有成功。

当我尝试从 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

我似乎对此一无所获。任何帮助或建议都将不胜感激。谢谢

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


解决方案 1:

您是否想使用 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_USER和添加EMAIL_HOST_PASSWORD到您已有的帐户中。如果您仍然遇到问题,可能是您的网络阻止了您。操作系统或路由器上的防火墙。

感谢 knite 更新了语法。给他 +1,并感谢 pranavk 让我了解 django 1.4 中的语法变化

解决方案 2:

首先创建应用程序专用密码

  1. 访问您的Google 帐户安全页面。然后点击两步验证:
    在此处输入图片描述


  1. 点击Google 帐户安全App passwords页面:
    在此处输入图片描述


  1. 创建一个App,选择Mail并命名:
    在此处输入图片描述


  1. 记下App Password
    在此处输入图片描述

然后将适当的值添加到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 来测试它:

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 有一个很好的答案,但是在 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'])

前四个参数是必需的:主题、消息、发件人电子邮件和收件人列表。

解决方案 4:

  1. 在 gmail 设置中启用 pop3。

  2. 为此 django 应用程序创建应用程序特定密码。(http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833

解决方案 5:

我会避免使用 GMail。它对一些电子邮件有用,但之后,您可能会发现所有电子邮件都被拒绝或被归为垃圾邮件。我使用亚马逊的“SES”服务与 Django-SES 解决了这个问题。

解决方案 6:

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

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

解决方案 7:

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

EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

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

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

sudo apt-get install sendmail

解决方案 8:

首先在 settings.py 文件中设置电子邮件后端变量。

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

然后,创建一个电子邮件对象来发送邮件。

from django.core import mail

connection = mail.get_connection() # Manually open the connection 
connection.open() # Construct an email message that uses the connection 
email = mail.EmailMessage( 'Hello', 'Body goes here', 'from@example.com', ['to1@example.com'], connection=connection, ) 
email.send() # Send the email
connection.close()
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用