Я пытаюсь отправить отчет о покрытии, созданный после выполнения контрольных примеров, который создается в папке htmlcov,
import os
from django.conf import settings
from utils import email_utils
def pytest_sessionfinish(session, exitstatus):
to = ['xyz123@gmail.com']
body = 'test'
subject = 'coverage test'
attachment = 'htmlcov/index.html'
coverage_html = os.path.join(settings.BASE_DIR + '/' + attachment)
email_utils.send_email_with_attachment(to, body, subject, coverage_html,
'application/html',
'index.html')
, при этом я получаю следующую ошибку:
ERROR | 2020-03-12 10:07:57,180 | MainThread | email_utils.send_email_with_attachment.69 | a bytes-like object is required, not 'str'
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/django/core/mail/message.py", line 342, in send
return self.get_connection(fail_silently).send_messages([self])
File "/usr/local/lib/python3.5/dist-packages/sgbackend/mail.py", line 66, in send_messages
mail = self._build_sg_mail(email)
File "/usr/local/lib/python3.5/dist-packages/sgbackend/mail.py", line 125, in _build_sg_mail
base64_attachment = base64.b64encode(attachment[1])
File "/usr/lib/python3.5/base64.py", line 59, in b64encode
encoded = binascii.b2a_base64(s)[:-1]
TypeError: a bytes-like object is required, not 'str'
Я проверил, существует ли файл в пути, используя оператор if, и да, он существует, это связано с тем, как я здесь работаю с файлами? Какой подход должен быть правильным?
это отправка электронной почты, которую я использую:
def send_email_with_attachment(to_email, body, subject, attachment_content=None, main_type=None, file_name=None):
data = {'from_email': settings.DEFAULT_FROM_EMAIL, 'to': to_email,
'subject': subject, 'body': body}
logger.info("sending email")
email = EmailMessage(**data)
email.content_subtype = "html"
if attachment_content:
email.attach(file_name, attachment_content, main_type)
try:
email.send()
logger.info("Email sent")
except BaseException as e:
logger.exception(e)