Невозможно прикрепить файл Excel к автоматическому электронному письму, используя python - PullRequest
0 голосов
/ 17 июня 2020

Я пишу функцию для отправки электронной почты с вложением Excel. Но при вызове функции у меня возникают проблемы. Я AWS сервер, отправляющий электронное письмо. Я вставил свою функцию отправки электронной почты вместе с вызовом функции.

Функция электронной почты

import os
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart

import boto3
from botocore.exceptions import ClientError

EMAIL_FROM = 'abc@gmail.com'
STAGE = os.getenv('STAGE')
ses = boto3.client('ses', 'eu-west-1')


def send(to: list, subject: str, body: str):
    try:
        ses.send_email(
            Destination={
                'ToAddresses': to
            },
            Message={
                'Body': {
                    'Text': {
                        'Charset': 'UTF-8',
                        'Data': body,
                    },
                },
                'Subject': {
                    'Charset': 'UTF-8',
                    'Data': f"[{STAGE}] {subject}",
                },
            },
            Source=EMAIL_FROM
        )
    except ClientError as e:
        raise ValueError(e.response['Error']['Message'])


def send_with_attachment(to: list, subject: str, body: str, attachments: dict):
    message = MIMEMultipart()
    message['Subject'] = f"[K+N:{STAGE}] {subject}"
    message['From'] = EMAIL_FROM
    message['To'] = ','.join(to)

    part = MIMEText(body)
    message.attach(part)

    # attachments
    for filename, content in attachments.items():
        part = MIMEApplication(str.encode(content))
        part.add_header('Content-Disposition', 'attachment', filename=filename)
        message.attach(part)

    try:
        ses.send_raw_email(
            Source=message['From'],
            Destinations=to,
            RawMessage={
                'Data': message.as_string()
            }
        )
    except ClientError as e:
        raise ValueError(e.response['Error']['Message'])

Функция вызова

send_with_attachment(
        to='xyz@gmail.com',
        subject='Report',
        body='Test',
        attachments={ 
            open('Report.xlsx', 'rb')

        }

    )

 Error : 'set' object has no attribute 'items'

У меня проблема при вызове функции. Любая помощь по решению проблемы.

...