Я пытаюсь отправить письмо с помощью сельдерея, оно может содержать файл вложения и не может, ошибка возникает, когда я отправляю письмо с прикрепленным файлом, он говорит:
EncodeError: <flask_mail.Attachment object at 0x7f5061af70d0> is not JSON serializable
@celery.task(name='task.email')
def send_async_email(msg_dict):
msg = Message()
msg.__dict__.update(msg_dict)
try:
mail.send(msg)
except SMTPRecipientsRefused:
return "Email invalid"
def msg_to_dict(to, subject, template, attachment, **kwargs):
app = current_app._get_current_object()
msg = Message(
subject=subject,
sender=app.config['APP_MAIL_SENDER'],
recipients=to
)
msg.body = template
if attachment is not None:
data = attachment.get_json()
with app.open_resource(data.get('file')) as fp:
msg.attach(data.get('name'), data.get('type'), fp.read())
return msg.__dict__
def send_email(to, subject, template, attachment, **kwargs):
send_async_email.delay(msg_to_dict(to, subject, template, attachment, **kwargs))
Внутри контроллера:
send_email(
to=emails.split(','),
subject=current_app.config['APP_LETTERS_TITLE'] + ' - ' + subject,
template=html_body,
sender=current_app.config['APP_MAIL_SENDER'],
attachment=
jsonify(
{
'name':str(file.filename),
'type':str(file.content_type),
'file':os.path.join(current_app.config['ATTACHMENTS_UPLOAD_FOLDER'], file.filename)
}
)
)