Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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 twisted SMTP服务器限制传入电子邮件的大小_Python_Email_Python 2.7_Smtp_Twisted - Fatal编程技术网

Python twisted SMTP服务器限制传入电子邮件的大小

Python twisted SMTP服务器限制传入电子邮件的大小,python,email,python-2.7,smtp,twisted,Python,Email,Python 2.7,Smtp,Twisted,这是我使用twisted创建SMTP服务器时使用的非常基本的代码: 来自电子邮件。标题导入标题 来自twisted.internet导入协议、延迟、反应器 从twisted.mail导入smtp 从zope.interface导入实现 类ConsoleMessageDelivery(对象): 实现(smtp.IMessageDelivery) def接收负责人(自身、直升机、来源、接收人): myHostname,clientIP=helo headerValue=“由%s从%s开始,使用ESM

这是我使用twisted创建SMTP服务器时使用的非常基本的代码:

来自电子邮件。标题导入标题
来自twisted.internet导入协议、延迟、反应器
从twisted.mail导入smtp
从zope.interface导入实现
类ConsoleMessageDelivery(对象):
实现(smtp.IMessageDelivery)
def接收负责人(自身、直升机、来源、接收人):
myHostname,clientIP=helo
headerValue=“由%s从%s开始,使用ESMTP;%s”%(myHostname,
客户,
smtp.rfc822date())
返回“已接收:%s”%Header(headerValue)
def validateFrom(自身、直升机、原点):
#所有地址均接受
返回原点
def validateTo(自身、用户):
#仅指向“”的消息console@domain“用户已被接受。
如果user.dest.local==“控制台”:
返回lambda:ConsoleMessage()
提升smtp.SMTPBadRcpt(用户)
类控制台消息(对象):
实现(smtp.IMessage)
定义初始化(自):
self.lines=[]
def行已接收(自身,行):
self.lines.append(行)
接收到的def EOM(自身):
打印“收到新邮件:”
打印“\n”.join(self.line)
self.lines=无
返回defer.success(无)
def connectionLost(自):
#出现错误,请扔掉存储的行
self.lines=无
类LocalSMTPFactory(smtp.SMTPFactory):
def构建协议(自身、地址):
smtpProtocol=smtp.ESMTP()
smtpProtocol.delivery=ConsoleMessageDelivery()
返回SMTPP协议
reactor.listenTCP(2025,LocalSMTPFactory())
反应堆运行()

我可以接收电子邮件,但如果我想拒绝接收大小为1MB或更大的传入邮件,我该如何做?

请注意,
ConsoleMessage.lineReceived
会随邮件的每一行调用。每条线都有一个大小(毫无疑问,与它的长度相似)。您可以在收到所有行时统计它们的大小,并根据结果采取行动

此外,您还可以浏览
SIZE
ESMTP扩展,该扩展允许服务器声明将接受的最大消息大小。这并不能取代代码处理消息行中的检查,因为不能保证客户端将遵守声明的最大值,但对于智能、协作的客户端,它将保存一些无意义的数据传输


SIZE
是一个非常简单的扩展,您可以通过子类化
Twisted.mail.smtp.ESMTP
并重写
extensions
方法来添加它,从而将其添加到Twisted的ESMTP服务器中。

知道如何使用/声明扩展吗?我正在尝试使用
def extensions(self)定义大小扩展:ext={'SIZE':1048576}return ext
但由于-->r.append(“%s%s”“(c)”,.join(v)),出现了一个类型错误。添加扩展名的正确方法是什么,这样我就可以得到类似于'250-SIZE 1048576'的内容?也许您可以想到一种数据结构,当应用
“”。join(it)
时,它将生成
“1048576”
?我最后使用ext['SIZE']=['1048576'],最后一个问题,250后面的“-”是否也不需要用于扩展?一般SMTP语法与响应终止有关。