Python中电子邮件协议的打印输出操作
我已经用python和tkinter构建了一个电子邮件客户端,tkinter是outlook/thunderball的一个类似但更具同情心的版本。我实际构建它的原因是为了我的A级计算项目,我的标题是“模拟SMTP/IMAP协议的工作方式”。因此,当我登录邮件服务器接收/发送电子邮件时,有没有办法打印出幕后发生的事情?希望这有意义 为了进一步解释,当您执行len(“Harry”)时,我希望打印出len函数正在执行的操作。除电子邮件协议条款外Python中电子邮件协议的打印输出操作,python,email,protocols,Python,Email,Protocols,我已经用python和tkinter构建了一个电子邮件客户端,tkinter是outlook/thunderball的一个类似但更具同情心的版本。我实际构建它的原因是为了我的A级计算项目,我的标题是“模拟SMTP/IMAP协议的工作方式”。因此,当我登录邮件服务器接收/发送电子邮件时,有没有办法打印出幕后发生的事情?希望这有意义 为了进一步解释,当您执行len(“Harry”)时,我希望打印出len函数正在执行的操作。除电子邮件协议条款外 建议/帮助/示例将不胜感激。假设您正在使用stdlib并
建议/帮助/示例将不胜感激。假设您正在使用stdlib并为您完成繁重的工作,此功能是内置的。见和 如果您不喜欢他们正在使用的格式或他们正在打印的内容,您可以始终对这些方法进行子类化和挂钩。例如,在
smtplib.SMTP
中,发送或接收的所有协议命令都发生在connect
、send
和getreply
中。因此:
class MySMTP(smtplib.SMTP):
def connect(self, host='localhost', port=0, source_address=None):
print('-- connecting to {}:{} from {} --'.format(host, port, source_address))
return super().connect(host, port, source_address)
def send(self, s):
print('> {}'.format(s))
return super().send(s)
def getreply(self):
code, s = super().getreply()
print('< ({}) {}'.format(code, s))
return code, s
classmysmtp(smtplib.SMTP):
def connect(self,host='localhost',port=0,source_address=None):
打印('--从{}--'连接到{}:{}。格式(主机、端口、源地址))
return super().connect(主机、端口、源地址)
def发送(自身):
打印(“>{}.”格式)
返回super()。发送
def getreply(self):
代码,s=super().getreply()
打印(“<({}){}.”格式(代码,s))
返回代码,s
如果这还不够好的话,就像stdlib中的许多库一样,这两个库可以作为示例代码使用,也可以开箱即用。这样的库在其文档的顶部总是有一个到源代码的链接。因此,您可以使用源代码的副本创建自己的fork,或者重写所选方法,并替换以if self.debug
(imaplib
)或if self.debuglevel
(smtplib
)开头的任何语句,以执行您希望执行的操作
如果您已经构建了自己的低级代码,那么只需在您编写的任何函数中添加一个
print
语句即可发送命令和分派接收到的命令,类似于send
和getreply
方法,这些方法来自smtplib.SMTP
。(如果您没有此类函数,而是在无数个位置重复所有低级网络逻辑,请首先重构代码以删除所有副本,然后在重构后的函数中添加print语句。)
如果您使用的是某个第三方库,在任何人告诉您如何钩住它之前,您必须告诉我们是哪一个(或者您是否需要钩住它;它可能具有相同的内置调试日志)。您是否使用stdlib
imaplib
和smtplib
模块,一些第三方库,或者你自己的代码?这是非常模糊和不清楚的具体问题是什么。你要打印到哪里?它怎么不起作用?你在试什么代码?标记为不清楚你在问什么。