微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django尝试发送smtp电子邮件,但连接被拒绝

如何解决Django尝试发送smtp电子邮件,但连接被拒绝

我正在使用Mac Catalina 10.15.7 / django 3.1.2 / python 3.8.5。

我正在尝试从Django发送电子邮件

首先,我在settings.py中定义了这些

EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS=True
EMAIL_HOST='smtp.gmail.com'
EMAIL_PORT=587
EMAIL_HOST_USER='MYID@gmail.com'
EMAIL_HOST_PASSWORD='MYPASSWORD'
SERVER_EMAIL='MYID@gmail.com'
DEFAULT_FROM_EMAIL=EMAIL_HOST_USER

然后,我进入gmail设置,1)启用了IMAP使用,2)(在帐户的安全设置中)启用了低安全性应用程序(https://www.google.com/settings/security/lesssecureapps

然后,在我的pycharms的python控制台中,

from django.core.mail import EmailMessage
email = EmailMessage('subject text','body text',to=['RECEIVINGEMAILID@gmail.com'])

但是我得到这些错误

Traceback (most recent call last):
  File "<input>",line 1,in <module>
  File "/Users/capstone1/lib/python3.8/site-packages/django/core/mail/message.py",line 225,in __init__
    self.from_email = from_email or settings.DEFAULT_FROM_EMAIL
  File "/Users/capstone1/lib/python3.8/site-packages/django/conf/__init__.py",line 83,in __getattr__
    self._setup(name)
  File "/Users/capstone1/lib/python3.8/site-packages/django/conf/__init__.py",line 64,in _setup
    raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_FROM_EMAIL,but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

所以我无法进行下一步email.send()

根据错误描述,我想也许我应该在settings.py中使用DJANGO_SETTINGS_MODULE块,例如-

DJANGO_SETTINGS_MODULE = [
    {
    'EMAIL_BACKEND':'django.core.mail.backends.smtp.EmailBackend','EMAIL_USE_TLS':True,'EMAIL_PORT':587,'EMAIL_HOST':"smtp.gmail.com",'EMAIL_HOST_USER':'MYID@gmail.com','EMAIL_HOST_PASSWORD':'MYPASSWORD','SERVER_EMAIL':'MYID@gmail.com','DEFAULT_FROM_EMAIL':"MYID@gmail.com"
    }
]

但是它仍然给我同样的错误

-

或者,如果我在终端上执行python manage.py shell

然后

>>> from django.core.mail import EmailMessage
>>> email = EmailMessage('subject text',to=['RECEIVINGEMAILID@gmail.com'])
>>> email.send()

我得到这些错误

Traceback (most recent call last):
  File "<console>",line 284,in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/Users/capstone1/lib/python3.8/site-packages/django/core/mail/backends/smtp.py",line 102,in send_messages
    new_conn_created = self.open()
  File "/Users/capstone1/lib/python3.8/site-packages/django/core/mail/backends/smtp.py",line 62,in open
    self.connection = self.connection_class(self.host,self.port,**connection_params)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/smtplib.py",line 253,in __init__
    (code,msg) = self.connect(host,port)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/smtplib.py",line 339,in connect
    self.sock = self._get_socket(host,port,self.timeout)
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/smtplib.py",line 308,in _get_socket
    return socket.create_connection((host,port),timeout,File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/socket.py",line 808,in create_connection
    raise err
  File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/socket.py",line 796,in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 61] Connection refused

我不明白为什么由于设置和启用了Gmail选项而导致出现拒绝连接错误,或者为什么在python控制台和python终端中出现了不同的错误

(+我听说Django已经安装了SMTP,所以我没有做其他事情。)

我该怎么办?

解决方法

在python shell中,必须先声明DJANGO_SETTINGS_MODULE,然后才能访问SendEmail之类的Django模块。
为什么会出现连接拒绝错误?可能是您在自己的帐户上使用2fa,还是没有关闭安全性较低的应用。

尝试通过将其附加到urls.py中的URL来运行以下视图功能。

from django.core.mail import EmailMessage

def SendEmail():
    status = False
    try:
        email = EmailMessage("test","test",to=['yourid@email.com'])
        email.send()
        status = True
    except Exception as e:
        print(e)    
    return status

在settings.py中定义如下的电子邮件设置,您已将其定义为字典

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'yourid@email.com'
EMAIL_HOST_PASSWORD = 'pwd'
EMAIL_PORT = 587    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。