Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中电子邮件协议的打印输出操作_Python_Email_Protocols - Fatal编程技术网

Python中电子邮件协议的打印输出操作

Python中电子邮件协议的打印输出操作,python,email,protocols,Python,Email,Protocols,我已经用python和tkinter构建了一个电子邮件客户端,tkinter是outlook/thunderball的一个类似但更具同情心的版本。我实际构建它的原因是为了我的A级计算项目,我的标题是“模拟SMTP/IMAP协议的工作方式”。因此,当我登录邮件服务器接收/发送电子邮件时,有没有办法打印出幕后发生的事情?希望这有意义 为了进一步解释,当您执行len(“Harry”)时,我希望打印出len函数正在执行的操作。除电子邮件协议条款外 建议/帮助/示例将不胜感激。假设您正在使用stdlib并

我已经用python和tkinter构建了一个电子邮件客户端,tkinter是outlook/thunderball的一个类似但更具同情心的版本。我实际构建它的原因是为了我的A级计算项目,我的标题是“模拟SMTP/IMAP协议的工作方式”。因此,当我登录邮件服务器接收/发送电子邮件时,有没有办法打印出幕后发生的事情?希望这有意义

为了进一步解释,当您执行len(“Harry”)时,我希望打印出len函数正在执行的操作。除电子邮件协议条款外


建议/帮助/示例将不胜感激。

假设您正在使用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
模块,一些第三方库,或者你自己的代码?这是非常模糊和不清楚的具体问题是什么。你要打印到哪里?它怎么不起作用?你在试什么代码?标记为不清楚你在问什么。