所以我有这个代码:
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中的所有数据?对不起,缩进是错误的
解决方法:
看起来你的问题是你:
>创建一个消息.
>将21个文件附加到msg.
>发送它.
>追加21个文件,以便它现在附加了42个文件.
>再发一次;第二条消息是第一条消息的两倍.
>追加21个文件,总数达到63个.
>再发一次;它现在变得非常庞大.
>等等.
当a == 21时,你应该重新开始使用一个新的msg对象,而不是继续将越来越多的文件附加到旧文件中.
或者,您可以尝试在连接新附件之前删除已存在的21个附件;但刚刚重新开始可能会更简单,因为你已经有了代码来启动带有正确标题的新消息 – 它只需要重构一点“开始新消息”功能.
标签:python,email 来源: https://codeday.me/bug/20190704/1379230.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。