如您所知,python smtplib 具有调试级别。当我将其设置为 true 参数时,它会打印一些发送信息。
问题是,我尝试获取调试信息以登录到文件中,但它们只是停留在我的 cmd 控制台上。
我该如何记录它们?
这样的信息:
connect: ('192.168.1.101', 25)
connect: (25, '192.168.1.101')
reply: '220 ESMTP on WinWebMail [3.8.1.3] ready. http://www.winwebmail.com\r\n'
reply: retcode (220); Msg: ESMTP on WinWebMail [3.8.1.3] ready. http://www.winw
ebmail.com
connect: ESMTP on WinWebMail [3.8.1.3] ready. http://www.winwebmail.com
send: 'ehlo [169.254.63.67]\r\n'
reply: '250-SIZE\r\n'
reply: '250 AUTH LOGIN\r\n'
reply: retcode (250); Msg: SIZE
AUTH LOGIN
bla bla bla bla........
最佳答案
smtplib
直接打印到 stderr
,例如smtplib.py 中的第 823 行:
print>>stderr, 'connect fail:', host
在导入 smtplib
或 smtplib.stderr
之前,您必须对 sys.stderr 进行猴子补丁 在您运行您的邮件代码之前。
我可能还建议使用自定义对象修补 smtplib.stderr
,该对象具有 write
方法来包装您的日志记录代码(例如,如果您使用的是日志记录库) :
import logging
import smtp
class StderrLogger(object):
def __init__(self):
self.logger = logging.getLogger('mail')
def write(self, message):
self.logger.debug(message)
org_stderr = smtp.stderr
smtp.stderr = StderrLogger()
# do your smtp stuff
smtp.stderr = org_stderr
这question包含一些使用上下文管理器修补 stderr 的有用示例。
关于python - 如何将 smtp 调试信息记录到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7303351/