我试图生成输出并将其发送到电子邮件,使用以下代码使用python smtplib模块,但它不能正常工作。邮件功能正在工作,但接收到一个空文件。有人能告诉我这段代码哪里错了吗?
import boto.iam
import csv
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Encoders
# Opening CSV file with write permission
file = open ('report.csv', 'wb')
writer = csv.writer(file)
writer.writerow(['UserName', 'arn', 'password-last-used'])
conn = boto.iam.connection.IAMConnection()
users = conn.get_all_users()['list_users_response']['list_users_result']['users']
for i in users:
writer.writerow([i.user_name, i.arn, i.get("password_last_used", 'Never Used')])
def send_report():
server = smtplib.SMTP("localhost", 25)
SUBJECT = "AWS Report"
EMAIL_FROM = "localhost"
EMAIL_TO = ['xxxxx@gmail.com']
msg = MIMEMultipart()
msg['Subject'] = SUBJECT
msg['From'] = EMAIL_FROM
msg['To'] = ', '.join(EMAIL_TO)
part = MIMEBase('application', "octet-stream")
part.set_payload(open("report.csv", "rb").read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="report.csv"')
msg.attach(part)
server.sendmail(EMAIL_FROM, EMAIL_TO, msg.as_string())
send_report()发布于 2017-04-07 00:11:41
缺少file.close()。这是典型的python反模式问题。始终使用with open() as以确保文件已正确关闭。
with open ('report.csv', 'wb') as file:
writer = csv.writer(file)
writer.writerow(['UserName', 'arn', 'password-last-used'])
for i in users:
writer.writerow(
[i.user_name, i.arn, i.get("password_last_used", 'Never Used')])https://stackoverflow.com/questions/43064804
复制相似问题