GAE Python - 如何将csv.writer的结果附加到邮件中?

1 投票
2 回答
1089 浏览
提问于 2025-04-17 19:19

在GAE Python上,我正在从我的数据存储中生成一个CSV文件,并希望通过电子邮件发送这个文件,而不想把它存储在blobstore里。这个操作计划每天作为一个定时任务运行一次。

导出功能正常,但我不知道怎么把这个CSV文件添加到电子邮件的附件里。如果你能提供一些帮助,我将非常感激。

class ShopExport(webapp2.RequestHandler):
  def get(self):
    shops = Shop.all().filter('active =', True).order('name')
    self.response.headers[str('Content-Type')] = str('application/csv')
    self.response.headers[str('Content-Disposition')] = str('attachment; filename="shops.csv"')
    writer = unicodecsv.writer(self.response.out, encoding='utf-8')
    writer.writerow(["id", "name", "domain", "category", "deeplink", "region"])
    writer.writerow([shop.keyname, shop.name, shop.url, shop.category, shop.url_aff, region])

    message = mail.EmailMessage(sender="Me <me@gmail.com>",
            subject="Shop Export",
            attachments=[("shops.csv", self.response.out)])
    message.to="Someone <someone@gmail.com>",
    message.html= 'Please find attached the shop export'
    message.send()

2 个回答

3

你可以这样做

import StringIO
...
data = StringIO.StringIO()
writer = unicodecsv.writer(data, encoding='utf-8')
...
message = mail.EmailMessage(sender="Me <me@gmail.com>",
            subject="Shop Export",
            attachments=[("shops.csv", bytes(data.getvalue()))])
1

试着修改这一行。

message = mail.EmailMessage(sender="Me <me@gmail.com>",
        subject="Shop Export",
        attachments=[("shops.csv", self.response.body)])

撰写回答