You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.7发送邮件报错排查及解决方案咨询

问题1:Python 2.7 发送邮件时出现 SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol

错误栈

Traceback (most recent call last):
  File "C:\Users\1651176\Desktop\male2.py", line 14, in <module>
    server = smtplib.SMTP_SSL(smtp_server, port, context)
  File "C:\ProgramData\App-V\86864BC8-DA90-464E-91D6-C9116EF05820\825D7C9B-7BA2-4F26-BDCC-55606B8D3CEC\Root\VFS\AppVPackageDrive\Python27\lib\smtplib.py", line 802, in __init__
    SMTP.__init__(self, host, port, local_hostname, timeout)
  File "C:\ProgramData\App-V\86864BC8-DA90-464E-91D6-C9116EF05820\825D7C9B-7BA2-4F26-BDCC-55606B8D3CEC\Root\VFS\AppVPackageDrive\Python27\lib\smtplib.py", line 256, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\ProgramData\App-V\86864BC8-DA90-464E-91D6-C9116EF05820\825D7C9B-7BA2-4F26-BDCC-55606B8D3CEC\Root\VFS\AppVPackageDrive\Python27\lib\smtplib.py", line 317, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:\ProgramData\App-V\86864BC8-DA90-464E-91D6-C9116EF05820\825D7C9B-7BA2-4F26-BDCC-55606B8D3CEC\Root\VFS\AppVPackageDrive\Python27\lib\smtplib.py", line 808, in _get_socket
    new_socket = ssl.wrap_socket(new_socket, self.keyfile, self.certfile)
  File "C:\ProgramData\App-V\86864BC8-DA90-464E-91D6-C9116EF05820\825D7C9B-7BA2-4F26-BDCC-55606B8D3CEC\Root\VFS\AppVPackageDrive\Python27\lib\ssl.py", line 949, in wrap_socket
    ciphers=ciphers)
  File "C:\ProgramData\App-V\86864BC8-DA90-464E-91D6-C9116EF05820\825D7C9B-7BA2-4F26-BDCC-55606B8D3CEC\Root\VFS\AppVPackageDrive\Python27\lib\ssl.py", line 617, in __init__
    self.do_handshake()
  File "C:\ProgramData\App-V\86864BC8-DA90-464E-91D6-C9116EF05820\825D7C9B-7BA2-4F26-BDCC-55606B8D3CEC\Root\VFS\AppVPackageDrive\Python27\lib\ssl.py", line 846, in do_handshake
    self._sslobj.do_handshake()
SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:726)

对应代码

import smtplib
import ssl
port = 587
smtp_server = "smtp.gmail.com"
sender_email = "send@gmail.com"  # Enter your address
receiver_email = "recieve@gmail.com"  # Enter receiver address
password = 'pwrd'
message = """\
Subject: Hi there

This message is sent from Python."""

context = ssl.create_default_context()
server = smtplib.SMTP_SSL(smtp_server, port, context)
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)
server.quit()

解决方法

端口587是STARTTLS端口,需先建立普通SMTP连接,再升级为加密连接,不能直接用SMTP_SSL连接(SMTP_SSL对应465隐式SSL端口)。修改代码如下:

import smtplib
import ssl
port = 587
smtp_server = "smtp.gmail.com"
sender_email = "send@gmail.com"
receiver_email = "recieve@gmail.com"
password = '你的应用专用密码'
message = """\
Subject: Hi there

This message is sent from Python."""

context = ssl.create_default_context()
# 先建立普通SMTP连接
server = smtplib.SMTP(smtp_server, port)
server.ehlo()
# 升级为加密连接
server.starttls(context=context)
server.ehlo()  # 再次发送ehlo确认
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)
server.quit()

问题2:Python 2.7 发送邮件时出现 SMTPAuthenticationError: (534, '5.7.9 Application-specific password required')

错误栈

Traceback (most recent call last):
  File "C:\Users\1651176\Desktop\male3o.py", line 13, in <module>
    server.login(username, password)
  File "C:\ProgramData\App-V\86864BC8-DA90-464E-91D6-C9116EF05820\825D7C9B-7BA2-4F26-BDCC-55606B8D3CEC\Root\VFS\AppVPackageDrive\Python27\lib\smtplib.py", line 623, in login
    raise SMTPAuthenticationError(code, resp)
SMTPAuthenticationError: (534, '5.7.9 Application-specific password required. Learn more at\n5.7.9  https://support.google.com/mail/?p=InvalidSecondFactor t71-20020a37aa4a000000b00741d87eb5d1sm2863856qke.105 - gsmtp')

对应代码

import smtplib

fromaddr = 'from@gmail.com' 
toaddrs  = 'to@gmail.com'  
msg = 'This message was sent from python.'  

username = 'Username'  
password = 'pwrd'

server = smtplib.SMTP('smtp.gmail.com', 587)  
server.ehlo()
server.starttls()
server.login(username, password)  
server.sendmail(fromaddr, toaddrs, msg)  
server.quit()

错误原因及解决方法

  1. 用户名错误:代码中username = 'Username'需替换为你的完整谷歌邮箱地址(如from@gmail.com),而非自定义用户名。
  2. 密码错误:确保使用的是开启两步验证后生成的16位应用专用密码,而非账号原密码。
  3. 修改后代码:
import smtplib

fromaddr = 'from@gmail.com' 
toaddrs  = 'to@gmail.com'  
msg = 'This message was sent from python.'  

username = 'from@gmail.com'  # 替换为完整邮箱地址
password = '你的16位应用专用密码'  # 替换为生成的应用专用密码

server = smtplib.SMTP('smtp.gmail.com', 587)  
server.ehlo()
server.starttls()
server.login(username, password)  
server.sendmail(fromaddr, toaddrs, msg)  
server.quit()

内容的提问来源于stack exchange,提问作者Markas M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:24:29