使用AWS SES发送电子邮件错误“ TypeError:'str'对象不可调用”

问题描述 投票:0回答:1

我想通过aws ses发送电子邮件,并具有以下输出:print(result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated'])

但是我遇到了错误TypeError: 'str' object is not callable

#!/usr/bin/env python3

import argparse
import boto3
import datetime

parser = argparse.ArgumentParser()
parser.add_argument('--days', type=int, default=1)
args = parser.parse_args()


now = datetime.datetime.utcnow()
start = (now - datetime.timedelta(days=args.days)).strftime('%Y-%m-%d')
end = now.strftime('%Y-%m-%d')

cd = boto3.client('ce', 'us-west-2')

results = []

token = None
while True:
    if token:
        kwargs = {'NextPageToken': token}
    else:
        kwargs = {}
    data = cd.get_cost_and_usage(TimePeriod={'Start': start, 'End':  end}, Granularity='DAILY', Metrics=['UnblendedCost'], GroupBy=[{'Type': 'DIMENSION', 'Key': 'LINKED_ACCOUNT'}, {'Type': 'DIMENSION', 'Key': 'SERVICE'}],Filter={'Dimensions': {'Key': 'SERVICE','Values': ['AWS Lambda']}}, **kwargs)
    results += data['ResultsByTime']
    token = data.get('NextPageToken')
    if not token:
        break

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

client = boto3.client('ses', 'us-west-2')

responses = client.send_email(
    Source='[email protected]',
    Destination={
        'ToAddresses': [
            '[email protected]',
        ]
    },
    Message={
        'Subject': {
            'Data': 'Lambda Billing Alarm',
            'Charset': 'UTF-8',
        },
        'Body': {
            'Html': {
                'Data': ('\t'.join(['TimePeriod', 'LinkedAccount', 'Service', 'Amount', 'Unit', 'Estimated']))
                (result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated']),
                'Charset': 'UTF-8',               
                }
            }
        }
    )

我想在电子邮件上得到这样的输出:

ses output

谢谢!

amazon-web-services amazon-ses
1个回答
0
投票

您在此处有一些错位的括号

  'Data': ('\t'.join(['TimePeriod', 'LinkedAccount', 'Service', 'Amount', 'Unit', 'Estimated']))
  (result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated']),
            'Charset': 'UTF-8',               
            }

注意以下片段中的问题:'Estimated']))(result_by_time

[您的代码基本上尝试执行的是以下(<some_string>)(arguments),其中<some_string>\t'.join(['TimePeriod', 'LinkedAccount', 'Service', 'Amount', 'Unit', 'Estimated'])。随后,您尝试调用字符串,解释您的错误:

“ TypeError:'str'对象不可调用”

也许您的Data应该是:

  'Data': '\t'.join([result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated'])
© www.soinside.com 2019 - 2024. All rights reserved.