2017-03-28 7 views
0

私は出力を生成し、python smtplibモジュールを使用して以下のコードを使用して電子メールに送信しようとしましたが、正しく動作しませんでした。メール機能は動作していますが、空のファイルを受信して​​います。このコードで何が間違っているか教えてください。python smtp attach function

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')])