python - 如何将 smtp 调试信息记录到文件中?

标签 python email smtp cmd smtplib

如您所知,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/

相关文章:

api - SendGrid SMTP API : Embed Image : Bad Request

email - 发送 8 位电子邮件安全吗?

python - 通过 Python 发送电子邮件的最简单方法

python - 已安装 OpenCV 但导入时仍找不到

python - 划分混合类型数据框列 - 如果任一列值是字符串,则保留字符串值

python - 如何使用python和selenium列出网站加载的所有js文件

html - Gmail HTML 电子邮件背景

windows - SMTP VRFY 扫描器的用途是什么?

c# - .NET Core MailKit SMTP AUTH LOGIN 作为本地 linux 帐户

python - crontab 中的 manage.py 命令不起作用