5

我是 Django 新手,但我已经阅读了大约 50 页(主要是 SO 和 Django 文档)并且没有找到任何适合我的情况的东西。

我只是想通过 Django 中的 send_mail 函数发送一封电子邮件;虽然我希望通过 Gmail 上的 SMTP 来实现这一点,但现在它甚至无法通过 localhost 来实现。当我在测试此 send_mail 函数的地方运行我的 test_email.py 文件时,我收到以下错误:

ConnectionRefusedError : [WinError 10061] 无法建立连接,因为目标机器主动拒绝了它

当我在 shell 中运行相同的 send_mail 调用时(通过 python manage.py shell),它完全没问题,并且可以按照我的预期显示电子邮件。只有当我尝试在 Django 中运行它时才会弹出错误。请注意,无论我在settings.py文件中放入以下两组设置的哪种排列,都会出现上述错误:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
EMAIL_HOST_USER = 'myemail@gmail.com'
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False

我还在我的 settings.py 文件中使用了以下内容,以及这些设置与前一组设置的各种混合(尽管我想我已经超越了自己看到 localhost 是如何不工作的):

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'myemail@gmail.com' # Note I'm using my actual gmail address here in real life
EMAIL_HOST_PASSWORD = '****' # Note I'm using my actual gmail password here in real life

DEFAULT_FROM_EMAIL = 'myemail@gmail.com' # Note I'm using my actual gmail address here in real life
SERVER_EMAIL = 'myemail@gmail.com' # Note I'm using my actual gmail address here in real life

当我尝试运行 localhost 路由时,我在 CMD 提示符下运行以下命令:

python -m smtpd -n -c DebuggingServer localhost:1025

这是我试图在 Django 中运行的test_email.py文件,我收到连接被拒绝错误:

from django.core.mail import send_mail,EmailMessage

from django.conf import settings
settings.configure()

# Create your tests here.

# Email test #1: send email from my personal email to myself
send_mail(
    'Email Test #1',
    'Test if I can send email from my personal Gmail account to another email account via Django project.',
    settings.EMAIL_HOST_USER,
    ['myemail@gmail.com'],
    fail_silently=False
    )

任何关于为什么这甚至不能通过 localhost 工作的想法或对其他尝试的建议将不胜感激。

谢谢!

4

4 回答 4

2

我觉得服务有问题gmail smtp。尝试使用smtp服务表单sendgrid。基本使用也是免费的。我之前也面临同样的问题。

项目 settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'sendgridusername'
EMAIL_HOST_PASSWORD = 'sedgridpasseord'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'yourmail@site.com'

仍然错误

Try if `smtp` service is working on your your server.
于 2017-09-12T04:27:33.360 回答
0

确保您的设置在project settings.pyNOTapp settings.py中,如下所示

EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False

请注意空字符串,因为EMAIL_HOST_USER我认为这是您的错误

一旦你运行你的虚拟 python SMTP 使用

python -m smtpd -n -c DebuggingServer localhost:1025

您将能够毫无问题地发送到您的本地 smtp 服务器。 资源

于 2019-08-03T20:37:01.173 回答
0

以下配置对我有用:

设置.py

EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey' # this is exactly the value 'apikey'
EMAIL_HOST_PASSWORD = 'sendgrid-api-key' # this is your API key
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = 'your-email@example.com' # this is the sendgrid email

我使用了这个配置,它工作正常,我强烈建议使用环境变量来填充EMAIL_HOST_PASSWORDDEFAULT_FROM_EMAIL

import os # this should be at the top of the file

# ...

EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey'
EMAIL_HOST_PASSWORD = os.getenv("EMAIL_HOST_PASSWORD", "")
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = os.getenv("DEFAULT_FROM_EMAIL", "")

为了发送电子邮件,请使用以下代码:

from django.conf import settings
from django.core.mail import send_mail

send_mail('This is the title of the email',
          'This is the message you want to send',
          settings.DEFAULT_FROM_EMAIL,
          [
              settings.EMAIL_HOST_USER, # add more emails to this list of you want to
          ]
)
于 2018-11-06T05:20:24.760 回答
0

确保您的邮件和密码正确后,尝试在您的 google 帐户中启用此选项。

https://myaccount.google.com/lesssecureapps?pli=1

谷歌阻止访问不安全的应用程序。

您的代码似乎是正确的!

于 2020-08-03T18:50:01.703 回答