Как отправить вывод в виде файла во вложении - PullRequest
1 голос
/ 31 мая 2019

Мне не хватает чего-то в коде, из-за которого я не могу это исправить. Хотя, когда я печатаю выходной файл. Это верно, но теперь мне нужно отправить вывод по электронной почте. Может кто-нибудь, пожалуйста, помогите мне с этим. Адрес электронной почты здесь не упоминается по соображениям безопасности, но от и до работает нормально. Я пытаюсь использовать код ses откуда-то еще, поэтому я не могу это исправить. Я пробую только boto3, ses, cost explorer api

      print('\t'.join(['TimePeriod', 'LinkedAccount', 'Service', 'Amount', 'Unit', 'Estimated']))
      for result_by_time in results:
        for group in result_by_time['Groups']:
          amount = group['Metrics']['UnblendedCost']['Amount']
          unit = group['Metrics']['UnblendedCost']['Unit']
          print(result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated'])


      send_email(start, result_by_time)

def send_email(start, attachment):
    msg = MIMEMultipart()
    msg['From']  = ""
    msg['To'] = ""
    msg['Subject'] = "Monthly AWS Cost Breakdown: {}".format(start)

    # what a recipient sees if they don't use an email reader
    msg.preamble = 'Multipart message.\n'

    # the message body
    part = MIMEText('Here is the aws billing data from last month.')
    msg.attach(part)

    # the attachment
    part = MIMEApplication(attachment)
    part.add_header('Content-Disposition', 'attachment', filename="AWS-MonthlyCostProject-{}.tsv".format(start))
    msg.attach(part)

    # Create an AWS Simple Email Service (SES) client
    client = boto3.client('ses')

    try:
        response = client.send_raw_email(
            RawMessage={
                 'Data': msg.as_string(),
            },
            #Source=msg['From'],
            #Destinations=to_emails
        )
    # Display an error if something goes wrong.
    except ClientError as e:
        print(e.response['Error']['Message'])
    else:
        print("Email sent! Message ID:"),
        print(response['ResponseMetadata']['RequestId'])




 "errorMessage": "expected bytes-like object, not dict",
  "errorType": "TypeError",
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      44,
      "lambda_handler",
      "send_email(start, result_by_time)"
    ],
    [
      "/var/task/lambda_function.py",
      60,
      "send_email",
      "part = MIMEApplication(attachment)"
    ],
    [
      "/var/lang/lib/python3.6/email/mime/application.py",
      37,
      "__init__",
      "_encoder(self)"
    ],
    [
      "/var/lang/lib/python3.6/email/encoders.py",
      32,
      "encode_base64",
      "encdata = str(_bencode(orig), 'ascii')"
    ],
    [
      "/var/lang/lib/python3.6/base64.py",
      527,
      "encodebytes",
      "_input_type_check(s)"
    ],
    [
      "/var/lang/lib/python3.6/base64.py",
      513,
      "_input_type_check",
      "raise TypeError(msg) from err"`enter code here`
    ]
  ]
}
...