Мне нужно отправить по электронной почте кадр данных pandas df
в виде вложения с помощью exchangelib. ниже мой код
import io
attachments=[]
x=io.BytesIO(df.to_records(index=False))
content=x.getvalue()
type(content) #bytes
send_email(account, 'Subject', 'test email', ['testemail.com'],
attachments=attachments)
когда я использую приведенный выше код, я получаю электронное письмо с вложением, но оно в байтовом формате, поэтому его невозможно прочитать.
Это потому, что тип (контент) - "байты"
Код ниже работает отлично. Это связано с тем, что тип (содержимое) является «классом« байты »> », но мне не разрешено сохранять свой фреймворк данных локально в виде файла .csv. Я хочу отправить кадр данных напрямую в виде вложения электронной почты. Как я могу преобразовать мой df
в формат «класс 'байты'>» и отправить вложение в формате csv по электронной почте?
attachments = []
with open('test.csv', 'rb') as f:
content = f.read()
type(content) #<class 'bytes'>
attachments.append(('test.csv', content))
ниже send_email я использую
from exchangelib import Configuration, Account, DELEGATE
from exchangelib import Message, Mailbox, FileAttachment
def send_email(account, subject, body, recipients, attachments=None):
"""
Send an email.
Parameters
----------
account : Account object
subject : str
body : str
recipients : list of str
Each str is and email adress
attachments : list of tuples or None
(filename, binary contents)
Examples
--------
"""
to_recipients = []
for recipient in recipients:
to_recipients.append(Mailbox(email_address=recipient))
# Create message
m = Message(account=account,
folder=account.sent,
subject=subject,
body=body,
to_recipients=to_recipients)
# attach files
for attachment_name, attachment_content in attachments or []:
file = FileAttachment(name=attachment_name, content=attachment_content)
m.attach(file)
m.send_and_save()