首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python smtp attach函数

python smtp attach函数
EN

Stack Overflow用户
提问于 2017-03-28 16:47:19
回答 1查看 61关注 0票数 0

我试图生成输出并将其发送到电子邮件,使用以下代码使用python smtplib模块,但它不能正常工作。邮件功能正在工作,但接收到一个空文件。有人能告诉我这段代码哪里错了吗?

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2017-04-07 00:11:41

缺少file.close()。这是典型的python反模式问题。始终使用with open() as以确保文件已正确关闭。

代码语言:javascript
复制
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')])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43064804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档