【问题标题】:No Attribute : 'audit' found while using smtplib to send emails无属性:使用 smtplib 发送电子邮件时发现“审计”
【发布时间】:2020-03-30 10:45:40
【问题描述】:

我试图通过smtplib发送电子邮件,但我总是收到属性错误。错误是:

Traceback (most recent call last):
  File "C:\Users\intel\Desktop\Python\test.py", line 24, in <module>
    server = smtplib.SMTP('smtp.gmail.com', 587)
  File "C:\Users\intel\Desktop\Python\smtplib.py", line 195, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\Users\intel\Desktop\Python\smtplib.py", line 275, in connect
    sys.audit("smtplib.connect", self, host, port)
AttributeError: module 'sys' has no attribute 'audit'

我知道我的代码中出现了错误:

# Step 7 - Create the server connection               
server = smtplib.SMTP('smtp.gmail.com', 587)

这是我的代码:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

# Step 2 - Create message object instance
msg = MIMEMultipart()

# Step 3 - Create message body
message = "Test from Python via AuthSMTP"

# Step 4 - Declare SMTP credentials
password = "password"
username = "andrew.whiteman77@gmail.com"

# Step 5 - Declare message elements
msg['From'] = "your.name@your-domain-name.com"
msg['To'] = "your.name@your-domain-name.com"
msg['Subject'] = "Test from Python via AuthSMTP"

# Step 6 - Add the message body to the object instance
msg.attach(MIMEText(message, 'plain'))

# Step 7 - Create the server connection                      # here is the line
server = smtplib.SMTP('smtp.gmail.com', 587)                 # where i am getting error!!!

# Step 8 - Switch the connection over to TLS encryption 
server.starttls()

# Step 9 - Authenticate with the server
server.login(username, password)

# Step 10 - Send the message
server.sendmail(msg['From'], msg['To'], msg.as_string())

# Step 11 - Disconnect
server.quit()

# Step 12 -
print("Successfully sent email message to %s:") % (msg['To'])

当我调试我的文件时,它显示:

任何帮助将不胜感激...

【问题讨论】:

  • 您能分享一下您用于该运行的 smtplib 版本吗?
  • 我不太清楚。当我尝试使用 pip 安装 smtplib 时它不存在,所以我只是复制了它的源代码并粘贴到一个新文件中,即 smtplib.py。任何帮助将不胜感激,我想这是最新的。
  • 嗯,这是官方网站源代码的链接:github.com/python/cpython/blob/3.8/Lib/smtplib.py
  • 我在 Pythın 3.7.3 和最新版本的 smtplib 中没有遇到任何错误。我什至收到了来自 Gmail 的安全警告。
  • 您的代码没有错误,您可以尝试重新安装/升级您的 Python 发行版。

标签: python python-3.x smtp attributeerror smtplib


【解决方案1】:

sys.audit()添加在Python 3.8.0之后,要调用这个方法你应该使用Python +3.8 Docs Audit Events

此表包含在整个 CPython 运行时和标准库中由 sys.audit()PySys_Audit() 调用引发的所有事件。 T这些调用是在 3.8.0 或更高版本中添加的

smtplib Blob CPython 3.7 Github 你可以看到他们没有使用 sys.audit()。所以,你的问题是关于你的 Python 版本。

【讨论】:

  • 在您提出升级 python 版本的建议后,这对我来说真的很有效,但会产生身份验证错误。为了解决这个问题,我必须编辑我的谷歌安全设置,但是有没有办法在不改变我的设置或安全的情况下这样做,以便谷歌为我提供身份验证??
【解决方案2】:

您需要将 python 升级到 3.8 才能解决此问题。

python3 -V
sudo apt-get install python3.8
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2
sudo update-alternatives --config python3

选择2或指向v3.8的序列号,然后按Enter

您可以使用

确认您的版本
python3 -V

【讨论】:

  • 第三行的目的是什么,安装python3.6.1?这是必要的还是推荐的,例如作为旧支持的后备?
猜你喜欢
  • 1970-01-01
  • 2018-12-09
  • 2015-09-07
  • 2023-02-11
  • 2020-09-19
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
相关资源
最近更新 更多