如何清除MIMEBase中的所有数据(邮件模块)
我有一段代码:
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os
def sendMail(to, subject, text, files=[],server="smtp.gmail.com:587"):
assert type(to)==list
assert type(files)==list
fro = "psaoflamand@live.com>"
msg = MIMEMultipart()
msg['From'] = fro
msg['To'] = COMMASPACE.join(to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach( MIMEText(text) )
a=0
username = 'psaoflamand@gmail.com'
password = 'pass'
# The actual mail send
smtp = smtplib.SMTP(server)
smtp.starttls()
smtp.login(username,password)
for file in files:
a+=1
print a
part = MIMEBase('application', "octet-stream")
part.set_payload( open(file,"rb").read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"'
% os.path.basename(file))
msg.attach(part)
if a==21:
smtp.sendmail(fro, to, msg.as_string() )
a=0
print 'sent'
smtp.quit()
sendMail(
["psaoflamand@live.com"],
"hello","cheers",
["Thousands of one megabyte files"]
这段代码一次发送21个文件,以避免超过Gmail的消息限制。但是问题是,MIMEBase中的数据还留着……我想问有没有办法删除MIMEBase中的所有数据?抱歉,缩进有点错。
1 个回答
3
看起来你的问题是这样的:
- 你创建了一个
msg
。 - 然后把21个文件添加到这个
msg
里。 - 接着发送这个消息。
- 之后又添加了21个文件,这样现在总共有42个文件了。
- 再发送一次;这个第二个消息的大小是第一个的两倍。
- 然后又添加了21个文件,总数变成63个。
- 再次发送;现在这个消息变得相当大了。
- 然后继续这样做。
当 a==21
的时候,你应该重新开始,创建一个新的 msg
对象,而不是继续往旧的里面添加更多文件。
另外,你也可以尝试在添加新文件之前,先把已经存在的21个附件删除;不过重新开始可能更简单,因为你已经有了创建新消息的代码,只需要把它整理成一个“开始新消息”的函数就可以了。