AWS Lambda - создайте CSV в памяти и отправьте в виде вложения в электронное письмо. - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь написать сервис AWS Lambda с использованием Python 2.7, который сгенерирует файл CSV в памяти и отправит его по электронной почте в виде вложения. Я чувствую, что я близок к этому сценарию на основе того, что я узнал, но я не совсем там.

# Import smtplib for the actual sending function
import smtplib
import sys
import csv 
import cStringIO
from os.path import basename
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
# Import the email modules we'll need
server = smtplib.SMTP('smtp.postmarkapp.com', 587)

server.starttls()

server.login('.....','.....')

list = []

row1 = ["One","Two","Three"]

list.append(row1)

msg = MIMEMultipart()
msg['To'] = "daniel@mydomain.com"
msg['From'] = "noreply@mydomain.com"
msg['Subject'] = "DG Test subject"
msg.attach(MIMEText("Test Message"))


csv_buffer = cStringIO.StringIO() 
writer = csv.writer(csv_buffer, lineterminator='\n')
writer.writerow(["1","2","3"])
for row in list:
    writer.writerow(row)
print(csv_buffer.getvalue())
msg.attach(csv_buffer)

try:
    response = server.sendmail(msg['From'], ["daniel@mydomain.com"],msg.as_string())
    server.quit()
except AttributeError as error:
    print(error)
else:
    print(response)

Это дает мне следующую ошибку:

1,2,3
One,Two,Three

'cStringIO.StringO' object has no attribute 'get_content_maintype'

В основном все сводится к тому, что вы не знаете, как использовать объект csv_buffer. Предполагая, что мне просто нужно как-то добавить этот атрибут к объекту, но я не совсем уверен, как. Если я пытаюсь добавить какие-либо дополнительные аргументы в строку .attach (), он жалуется, что у меня слишком много аргументов.

Спасибо!

1 Ответ

0 голосов
/ 06 июля 2018

Я понял это, благодаря соединению нескольких SO сообщений.

import  cStringIO
import csv

csv_buffer = cStringIO.StringIO() 
writer = csv.writer(csv_buffer, delimiter=',', quoting=csv.QUOTE_ALL)
writer.writerow(["1","2","3"])
  for row in list:
    writer.writerow(row)
    print(csv_buffer.getvalue())

# new lines
csv_file = MIMEText(csv_buffer.getvalue())
attachment = csv_file.add_header('Content-Disposition', 'attachment', filename="csv_file.csv")
msg.attach(csv_file)
...