【Python-因特网客户端编程-10】邮件系统用python发邮件报错Failed to send email: Connection unexpectedly closed,什么原因怎么解决
Failed to send email: Connection unexpectedly closed” 错误通常是由于 SMTP 服务器连接中断或连接被拒绝引起的。如果问题仍然存在,可以尝试联系邮箱提供商的技术支持,获取更多帮助。确保本地防火墙或安全软件没有阻止 SMTP 端口(465 或 587)的连接。确保你的网络连接稳定,并且可以访问互联网。如果你的网易邮箱需要使用授权码而不是密码,请确
邮件系统用python发邮件
一、网易邮箱的smtp服务器是什么
网易邮箱(包括163邮箱和126邮箱)的SMTP服务器地址如下:
-
163邮箱
- SMTP服务器地址:
smtp.163.com - 端口:25(非加密)或 465/994(SSL/TLS加密)
- SMTP服务器地址:
-
126邮箱
- SMTP服务器地址:
smtp.126.com - 端口:25(非加密)或 465/994(SSL/TTLS加密)
- SMTP服务器地址:
使用Python发送邮件的完整示例
以下是一个使用Python通过网易163邮箱SMTP服务器发送电子邮件的完整示例代码:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# 配置SMTP服务器和端口
smtp_server = 'smtp.163.com' # 网易163邮箱SMTP服务器地址
smtp_port = 465 # SMTP端口号,通常是465或994用于SSL/TLS加密
smtp_user = 'your_email@163.com' # 你的网易163邮箱地址
smtp_password = 'your_password' # 你的网易163邮箱密码(或者是授权码)
# 配置发件人、收件人和邮件主题
from_email = 'your_email@163.com' # 发件人邮箱地址
to_email = 'recipient_email@example.com' # 收件人邮箱地址
subject = 'Test Email' # 邮件主题
# 创建邮件内容
body = '''
Hello,
This is a test email sent from Python using 163.com SMTP server.
Best regards,
Your Name
'''
# 创建MIME对象
msg = MIMEMultipart()
msg['From'] = from_email
msg['To'] = to_email
msg['Subject'] = subject
# 添加邮件正文
msg.attach(MIMEText(body, 'plain'))
try:
# 连接到SMTP服务器
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(smtp_user, smtp_password) # 登录SMTP服务器
# 发送邮件
server.sendmail(from_email, to_email, msg.as_string())
print('Email sent successfully!')
except Exception as e:
print(f'Failed to send email: {e}')
finally:
server.quit() # 关闭连接
说明
-
SMTP 服务器配置:
smtp_server:网易163邮箱的SMTP服务器地址是smtp.163.com。smtp_port:SMTP服务器端口号,465用于SSL/TLS加密。
-
发件人和收件人:
from_email:发件人电子邮件地址。to_email:收件人电子邮件地址。subject:电子邮件的主题。
-
邮件内容:
body:邮件的正文内容,可以是纯文本或HTML。
-
MIME 对象:
- 使用
MIMEMultipart和MIMEText模块创建一个MIME对象,并将邮件的各个部分(如发件人、收件人、主题和正文)添加到该对象中。
- 使用
-
发送邮件:
- 连接到SMTP服务器,使用
SMTP_SSL()方法进行SSL加密连接。 - 使用
login()方法登录SMTP服务器。 - 使用
sendmail()方法发送邮件。 - 在发送完成后,使用
quit()方法关闭与SMTP服务器的连接。
- 连接到SMTP服务器,使用
注意事项
- 确保你的邮箱设置允许SMTP发送邮件。如果是第一次使用SMTP服务,可能需要在邮箱的设置中启用相关权限或获取授权码。
- 使用SSL/TLS加密连接来保护密码和邮件内容的安全。
- 避免在代码中硬编码敏感信息(如密码),可以使用环境变量或配置文件来存储这些信息。
二、用python发邮件报错Failed to send email: Connection unexpectedly closed,什么原因怎么解决
“Failed to send email: Connection unexpectedly closed” 错误通常是由于 SMTP 服务器连接中断或连接被拒绝引起的。以下是一些可能的原因和相应的解决方法:
可能的原因
- 网络问题:网络连接不稳定,导致与 SMTP 服务器的连接中断。
- 服务器设置:SMTP 服务器设置不正确,可能是端口、加密方式或服务器地址有误。
- 防火墙或安全软件:本地防火墙或安全软件阻止了与 SMTP 服务器的连接。
- SMTP 服务器问题:SMTP 服务器本身可能有问题,导致连接中断。
- 邮箱设置:邮箱设置中没有启用 SMTP 服务或需要使用授权码。
解决方法
1. 检查 SMTP 服务器设置
确保 SMTP 服务器地址和端口号正确。对于网易163邮箱,使用以下设置:
- SMTP 服务器地址:
smtp.163.com - 端口:465(SSL/TLS 加密)
2. 启用 SSL/TLS 加密
确保在连接 SMTP 服务器时启用了 SSL/TLS 加密。使用 smtplib.SMTP_SSL 方法进行连接。
3. 检查网络连接
确保你的网络连接稳定,并且可以访问互联网。可以尝试 ping 一下 SMTP 服务器地址,确认网络连通性。
4. 检查防火墙和安全软件
确保本地防火墙或安全软件没有阻止 SMTP 端口(465 或 587)的连接。你可能需要在防火墙设置中允许这些端口的流量。
5. 使用授权码
如果你的网易邮箱需要使用授权码而不是密码,请确保在代码中使用正确的授权码。
6. 尝试重新连接
尝试重新连接 SMTP 服务器,确保连接没有中途断开。
示例代码
以下是一个改进的示例代码,包含了详细的调试信息和错误处理:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# 配置 SMTP 服务器和端口
smtp_server = 'smtp.163.com'
smtp_port = 465
smtp_user = 'your_email@163.com'
smtp_password = 'your_password' # 或者是授权码
# 配置发件人、收件人和邮件主题
from_email = 'your_email@163.com'
to_email = 'recipient_email@example.com'
subject = 'Test Email'
# 创建邮件内容
body = '''
Hello,
This is a test email sent from Python using 163.com SMTP server.
Best regards,
Your Name
'''
# 创建 MIME 对象
msg = MIMEMultipart()
msg['From'] = from_email
msg['To'] = to_email
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))
try:
# 连接到 SMTP 服务器
print('Connecting to SMTP server...')
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.set_debuglevel(1) # 启用调试输出
server.login(smtp_user, smtp_password) # 登录 SMTP 服务器
print('Successfully logged in to SMTP server.')
# 发送邮件
server.sendmail(from_email, to_email, msg.as_string())
print('Email sent successfully!')
except smtplib.SMTPException as e:
print(f'Failed to send email: {e}')
except Exception as e:
print(f'An error occurred: {e}')
finally:
server.quit() # 关闭连接
print('Connection to SMTP server closed.')
说明
-
启用调试输出:
- 使用
server.set_debuglevel(1)启用调试输出,查看与 SMTP 服务器的通信过程。
- 使用
-
错误处理:
- 使用
try-except块捕获和处理不同类型的错误,并打印详细的错误信息。
- 使用
-
确保连接和登录成功:
- 在连接和登录时打印信息,确保每一步都成功执行。
通过这些步骤,你可以更好地诊断和解决“Connection unexpectedly closed”错误。如果问题仍然存在,可以尝试联系邮箱提供商的技术支持,获取更多帮助。
更多推荐




所有评论(0)