LINUX.ORG.RU

Кто срезал вложение?

 ,


0

2

Python3, отправляю мыло через свой postfix. При отправке вижу, что вложение прикрепляется (логгирование выставил в debug). В логах

mail# tail mail.log
May 17 13:19:17 mail postfix/smtpd[15996]: connect from unknown[192.168.199.200]
May 17 13:19:18 mail postfix/smtpd[15996]: 836CFACD46: client=unknown[192.168.199.200]
May 17 13:19:21 mail postfix/cleanup[15999]: 836CFACD46: message-id=<>
May 17 13:19:22 mail opendkim[30071]: 836CFACD46: [192.168.199.200] [192.168.199.200] not internal
May 17 13:19:22 mail opendkim[30071]: 836CFACD46: not authenticated
May 17 13:19:27 mail postfix/qmgr[14965]: 836CFACD46: from=<mail@mail2send.tk>, size=2922436, nrcpt=1 (queue active)
May 17 13:19:27 mail postfix/smtpd[15996]: disconnect from unknown[192.168.199.200]
May 17 13:19:58 mail postfix/smtp[16000]: connect to gmail-smtp-in.l.google.com[2a00:1450:4010:c02::1b]:25: Connection timed out
May 17 13:20:01 mail postfix/smtp[16000]: 836CFACD46: to=<mail4bvn@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.205.27]:25, delay=43, delays=9.3/0.02/31/2.3, dsn=2.0.0, status=sent (250 2.0.0 OK 1495016401 o28si808723lfc.319 - gsmtp)
May 17 13:20:01 mail postfix/qmgr[14965]: 836CFACD46: removed

Ничего, вроде бы, криминального...

Но письмо пришло без вложения:

Content-Type: multipart/alternative; boundary="===============1145899944397147488=="

--===============1145899944397147488==
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0

<h1><span style="font-size: large;">another </span><strong style="font-size: large;">simple </strong><span style="font-size: large;">test is </span><span style="font-size: large; font-family: monospace;">here </span><span style="font-size: large; font-family: monospace; color: rgb(0, 102, 204);">YEEEEEAAAAAAHHHHHH</span><span style="font-size: large; font-family: monospace;">!!!!!</span></h1>

--===============1145899944397147488==
Content-Type: application/octet-stream;


--===============1145899944397147488==--

★★★★★

Ответ на: комментарий от imul

именно с этим - не знаю. не проверял еще. но сегодня на гмайл вложение уходило. другой файл.

bvn13 ★★★★★ ()
Ответ на: комментарий от imul

Отправил себе на яндекс.

Вложение дошло, но не отображается в письме. Вот заголовки:

--===============3746398182764355441==
Content-Type: application/octet-stream;
Name*=utf-8''%D0%BD%D0%B0_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B.jpg
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="WJ3TQt4fHZ6GMOOVgKHyMPZc7L5nsQ.jpg"
;
filename*=UTF-8''%D0%BD%D0%B0_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B.jpg

Где я напортачил?

bvn13 ★★★★★ ()
Ответ на: комментарий от bvn13

Отправил сейчас на gmail себе из сильфиды письмо с аттачем.
Картинку видно, в исходниках такая ситуация:

В заголовке письма:
Content-Type: multipart/mixed; boundary=«Multipart=_Wed__17_May_2017_15_42_48_+0300___kfi4rRLH78xcJZ»

Перед подписью:
This is a multi-part message in MIME format.

--Multipart=_Wed__17_May_2017_15_42_48_+0300___kfi4rRLH78xcJZ
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

После подписи:

--Multipart=_Wed__17_May_2017_15_42_48_+0300___kfi4rRLH78xcJZ
Content-Type: image/jpeg; name=«20170515_104215.jpg»
Content-Disposition: attachment; filename=«20170515_104215.jpg»
Content-Transfer-Encoding: base64

Содержимое в base64

--Multipart=_Wed__17_May_2017_15_42_48_+0300___kfi4rRLH78xcJZ--

Как-то отличий не видно. Кинь мне письмо с аттачем на mike at lumi dot pw, посмотрю всё целиком.

imul ★★★★★ ()
Ответ на: комментарий от bvn13

Да, файл во вложении есть.
Попортилось имя файла.

От тебя в заголовке письма:
Content-Type: multipart/alternative; boundary=«===============4875767754983993452==»

В теле письма:
--===============4875767754983993452==
Content-Type: text/html; charset=«utf-8»
Content-Transfer-Encoding: base64
MIME-Version: 1.0

Само вложение:
--===============4875767754983993452==
Content-Type: application/octet-stream;Name*=utf-8"%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename='o7pajcDdO746Xh4Apk1j8Q1Y0QZ5DZ.png'

***content in base64***

--===============4875767754983993452==--


А вот так формирует аттач gmail:
(в этом случае имя файла было корректное)
Content-Type: multipart/mixed; boundary=«001a114f0992029b4c054fb92fa2»

--001a114f0992029b4c054fb92fa2
Content-Type: image/png; name=«=?UTF-8?B?0JHQtdC30YvQvNGP0L3QvdGL0LkucG5n?=»
Content-Disposition: attachment; filename=«=?UTF-8?B?0JHQtdC30YvQvNGP0L3QvdGL0LkucG5n?=»
Content-Transfer-Encoding: base64
X-Attachment-Id: f_j2t38pn30

Тот же файл с крестиком в base64

--001a114f0992029b4c054fb92fa2--

Одно явное отличие — у тебя аттач в multipart/alternative вместо multipart/mixed
Второе явное отличие —
Name*=utf-8"%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png
вместо
name=«=?UTF-8?B?0JHQtdC30YvQvNGP0L3QvdGL0LkucG5n?=»

$ echo 0JHQtdC30YvQvNGP0L3QvdGL0LkucG5n | base64 -d
Безымянный.png
Я уже сейчас точно не помню, обязательно ли пропускать через base64 название файла, может быть итак должно работать, но почему-то не работает. Может быть gmail или yandex пытаются декодировать строку имени, обламываются и считают что аттача нет.

imul ★★★★★ ()
Ответ на: комментарий от imul

PS: ну и лор вдобавок кавычки попортил...

Да, файл во вложении есть.
Попортилось имя файла.

В заголовке письма:
Content-Type: multipart/alternative; boundary="===============4875767754983993452=="

В теле письма:
--===============4875767754983993452==
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0

Само вложение:
--===============4875767754983993452==
Content-Type: application/octet-stream;Name*=utf-8''%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename='o7pajcDdO746Xh4Apk1j8Q1Y0QZ5DZ.png'

***content in base64***

--===============4875767754983993452==--


Вот так формирует аттач gmail
В этом случае имя файла было корректное.
Content-Type: multipart/mixed; boundary="001a114f0992029b4c054fb92fa2"

--001a114f0992029b4c054fb92fa2
Content-Type: image/png; name="=?UTF-8?B?0JHQtdC30YvQvNGP0L3QvdGL0LkucG5n?="
Content-Disposition: attachment; filename="=?UTF-8?B?0JHQtdC30YvQvNGP0L3QvdGL0LkucG5n?="
Content-Transfer-Encoding: base64
X-Attachment-Id: f_j2t38pn30

Тот же файл с крестиком в base64

--001a114f0992029b4c054fb92fa2--

Одно явное отличие -- у тебя аттач в multipart/alternative вместо multipart/mixed
Второе явное отличие -- 
Name*=utf-8''%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png 
вместо 
name="=?UTF-8?B?0JHQtdC30YvQvNGP0L3QvdGL0LkucG5n?="

$ echo 0JHQtdC30YvQvNGP0L3QvdGL0LkucG5n | base64 -d
Безымянный.png
Я уже сейчас точно не помню, обязательно ли пропускать через base64
название файла, может быть итак должно работать, но почему-то не
работает. Может быть gmail или yandex пытаются декодировать строку
имени, обламываются и считают что аттача нет.

imul ★★★★★ ()
Ответ на: комментарий от imul

В интернетах вычитал, что отправлять из питона надо так:

msg = EmailMessage()
# ...
part = MIMEApplication(
                        fil.read(),
                        Name=f['name']
                    )
part.add_header('content-disposition', 'attachment', filename=f['name'])

Тебе я оправлял вот так:

part['Content-Disposition'] = "attachment; filename=\"%s.%s\"; filename*=UTF-8''%s" % (f['uid'], f['ext'], quote(f['name']))

В недрах модуля email я разглядел, что заголовок 'Content-Disposition' нужно ставить так:

part.add_header('content-disposition', 'attachment', filename=f['name'])

В итоге, ни один из способов не сработал.

bvn13 ★★★★★ ()
Ответ на: комментарий от bvn13

У тебя строки с именами файла сильно различаются.

Content-Type: application/octet-stream;Name*=utf-8''%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png
Content-Disposition: attachment; filename='o7pajcDdO746Xh4Apk1j8Q1Y0QZ5DZ.png'

Попробуй сделать в этих заголовках одинаково и так как делает gmail.

imul ★★★★★ ()

Content-Type: application/octet-stream;
Кто срезал вложение?

А головой подумать? Много ли нормальных юзеров друг-другу бинарники шлют?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.