Мне нужно отправить 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)
, когда я использую вышеуказанный код, я получаю письмо с вложением, но оно имеет формат байтов, поэтому его невозможно прочитать.
Это потому, что тип (содержимое) is "bytes"
Ниже код работает отлично. Это потому, что type (content) - это "class 'bytes'>", но мне не разрешено локально сохранять мой фрейм данных в виде файла .csv. Я хочу отправить датафрейм напрямую в виде вложения электронной почты. Как я могу преобразовать мой df
в формат "class 'bytes'>" и отправить вложение в 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()