python日志记录.handlers.SMTPHandler出现问题,“凭证”未被识别为SMTPHandler的属性

fcg9iug3  于 2023-03-22  发布在  Python
关注(0)|答案(1)|浏览(103)

我试图在我的python应用程序中设置关键错误的电子邮件日志。我在尝试初始化SMTPHandler时不断遇到错误:
属性错误:'SMTPHandler'对象没有属性'credentials'
我使用的是Python 3.10,我在程序中创建了一个组件,在那里我得到了错误。

import logging
from logging.handlers import SMTPHandler

mail_handler = SMTPHandler(
    mailhost='my.hosting.com',
    fromaddr='admin@myapp.com',
    toaddrs=['admin@myapp.com'],
    subject='Application Error', 
    credentials=('admin@myapp.com', 'mypassword'),
    secure=()
)
print(mail_handler.mailhost)
print(mail_handler.fromaddr)
print(mail_handler.toaddrs)
print(mail_handler.subject)
print(mail_handler.secure)
print(mail_handler.timeout)
print(mail_handler.credentials)
mail_handler.setLevel(logging.ERROR)
mail_handler.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s in %(module)s: %(message)s'))

我得到的print语句和回溯是:

my.hosting.com
admin@myapp.com
['admin@myapp.com']
Application Error
()
5.0
Traceback (most recent call last):
  File "C:\Users\user\Documents\myapp\test.py", line 31, in <module>
    print(mail_handler.credentials)
AttributeError: 'SMTPHandler' object has no attribute 'credentials'

当我使用以下代码片段检查SMTPHandler的init语句以确保我没有访问非常旧的版本(我认为凭据是在Python 2.6中添加的)时:

import inspect

signature = inspect.signature(SMTPHandler.__init__).parameters
for name, parameter in signature.items():
    print(name, parameter.default, parameter.annotation, parameter.kind)`

我得到:

self <class 'inspect._empty'> <class 'inspect._empty'> POSITIONAL_OR_KEYWORD
mailhost <class 'inspect._empty'> <class 'inspect._empty'> POSITIONAL_OR_KEYWORD
fromaddr <class 'inspect._empty'> <class 'inspect._empty'> POSITIONAL_OR_KEYWORD
toaddrs <class 'inspect._empty'> <class 'inspect._empty'> POSITIONAL_OR_KEYWORD
subject <class 'inspect._empty'> <class 'inspect._empty'> POSITIONAL_OR_KEYWORD
credentials None <class 'inspect._empty'> POSITIONAL_OR_KEYWORD
secure None <class 'inspect._empty'> POSITIONAL_OR_KEYWORD
timeout 5.0 <class 'inspect._empty'> POSITIONAL_OR_KEYWORD

所以'credentials'是在初始化语句中。
有人在我的代码中看到了一些愚蠢的东西或者遇到了这个问题吗?
非常感谢!

pepwfjgg

pepwfjgg1#

你的计算机上有所有标准模块的完整源代码,我只是快速浏览了一下,虽然SMTPHandler接受credentials参数,但它将该参数存储在self.usernameself.password中。

相关问题