2017-03-28 189 views
0

我试图生成一个输出并发送相同的电子邮件,使用下面的代码使用python smtplib模块,但它没有正常工作。邮件功能正在工作,但收到一个空文件。可以有人指导我这个代码有什么问题蟒蛇smtp附加功能

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 = ['[email protected]'] 
    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() 

回答

0

有一个缺少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')])