soa*_*sme 4 python email cmd smtp smtplib
如您所知,python smtplib具有调试级别.当我将其设置为真正的参数时,它将打印一些发送信息.
问题是,我尝试将调试信息记录到一个文件中,但它们只停留在我的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........
Mar*_*ill 11
在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
这个问题包含一些使用上下文管理器修补stderr的有用示例.
| 归档时间: | 
 | 
| 查看次数: | 5481 次 | 
| 最近记录: |