У вас есть несколько опечаток здесь.
p.add_header('Content-Decomposition', 'attachment, filename="document.xlsx"')
Имя заголовка: Content-Disposition
, и вы должны иметь точку с запятой после расположения, а не запятую.
p.add_header('Content-Disposition', 'attachment; filename="document.xlsx"')
Раньше было недостаточно, когда указание имени файла в заголовке Content-Disposition:
было недостаточным, поэтому у некоторых клиентов все еще есть запасной вариант с поясом и подтяжками, а также добавление ; name="document.xslx"
к заголовку Content-Type: application/octet-stream
части тела. Возможно также использовать стандартный тип содержимого IANA для Excel; см. Каков правильный тип пантомимы для docx, pptx et c? , который предполагает application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
... итак, вы должны посмотреть на что-то вроде
Content-Type: multipart/mixed; boundary="===============5298122497454831280=="
MIME-Version: 1.0
From: example@hotmail.com
To: example@yahoo.com
Subject: Subject of the Mail
--===============5298122497454831280==
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
this is a test py
--===============5298122497454831280==
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;
name="document.xlsx"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="document.xlsx"
77+/dHJpcGzuu64=
--===============5298122497454831280==--
(где я заменил данные base64
простым заполнителем).
(Кроме того, Python тупо настаивает на добавлении заголовка MIME-Version:
к каждой части тела, но это совершенно не нужно.)