首页 > 解决方案 > 为什么我在尝试通过 Python 发送和发送电子邮件时收到“SMTPServerDisconnected”?

问题描述

我利用我的 Android 手机通过 python 编码发送一封简单的电子邮件。这是代码:

import os
import smtplib
EMAIL_ADDRESS =os.environ.get('EMAIL_USER')
EMAIL_PASSWORD =os.environ.get('EMAIL_PASS')
with smtplib.SMTP('smtp.gmail.com', 465) as smtp:
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
   
  smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
  subject = 'Practice email code'
  body = 'This is my 1st output'

  msg = f'Subject:{subject}\n{body}'

smtp.sendmail(EMAIL_ADDRESS, EMAIL_ADDRESS, msg)

这是我得到的回溯:

回溯(最后一次调用):文件“/data/user/0 ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py”,第 31 行,在 start(fakepyfile,mainpyfile) 文件“/data/user/ 0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py”,第 30 行,在 start exec(open(mainpyfile).read(), main .dict )文件“”,第 7 行,在文件“/ data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/smtplib.py”,第 251 行,在init (代码,味精)= self.connect(主机,端口)文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/smtplib.py”,第338行,在连接(代码,味精)= self.getreply()文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/smtplib.py”,第394行, 在 getreply 中引发 SMTPServerDisconnected("连接意外关闭") smtplib.SMTPServerDisconnected: 连接意外关闭

编辑:当我尝试 587 端口时,这是错误:

Traceback(最近一次调用最后一次):文件“”,第 12 行,在文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/smtplib.py”中,第 721 行,在登录 initial_response_ok=initial_response_ok) 文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/smtplib.py”,第 638 行,在 auth authobject( challenge).encode('ascii'), eol='') AttributeError: 'NoneType' object has no attribute 'encode'

在处理上述异常的过程中,又出现了一个异常:

Traceback(最近一次调用最后一次):文件“/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py”,第 31 行,在 start(fakepyfile,mainpyfile) 文件“/data/user /0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py”,第 30 行,在 start exec(open(mainpyfile).read(), main .dict )文件中“”,第 19 行,在文件中“ /data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.7/smtplib.py”,第 280 行,退出 引发 SMTPResponseException(代码,消息)smtplib.SMTPResponseException:(334 , b'UGFzc3dvcmQ6')

我很感激任何建议!

标签: pythonemailsmtpportsmtplib

解决方案


这是使用 SMTP 的正确方法

    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.login('EMAIL', 'PASSWORD')
    server.sendmail('EMAIL to send from',to, msg)
    server.close()

此外,您的电子邮件应允许外部资源访问您的电子邮件,从而降低安全性,因此我建议为此使用额外的电子邮件


推荐阅读