Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумПочта и рассылки

Вложения и размер письма: где начинаются отказы

Ирина Пахомова
Ирина Пахомова
Новичок
сообщений 280
с янв, второй сезон
8 октября, 11:57первое сообщение

Рассылаю макеты подрядчикам, файлы pdf по 20-30 МБ. Часть уходит, часть возвращается с отказом, причём один и тот же файл: одному адресату дошёл, другому нет.

Свой сервер потолок не режет, проверяла у хостера. Значит дело в приёмниках? И как заранее понять, кому что можно слать?

Наиль Габдуллин
Наиль Габдуллин
Знаток
сообщений 1885
с мар
15 марта, 14:14#2

Приёмник сам объявляет свой потолок, надо только спросить. В ответе на EHLO есть строка SIZE с числом байт.

потолок приёмника из EHLO
потолок приёмника из EHLO

Тут потолок 35 МБ. Файл на 30 МБ туда не влезет, потому что после кодирования он станет примерно 40. Про эту прибавку забывают чаще всего.

разбираю чужие конфиги за печенье
Ирина Пахомова
Ирина Пахомова
Новичок
сообщений 280
с янв, второй сезон
22 августа, 17:31#3
Наиль Габдуллин: после кодирования он станет примерно 40

Откуда прибавка? Файл же не меняется.

ferrum
ferrum
Участник
сообщений 660
с сен
1 января, 08:48#4

Вложение внутри письма едет текстом. Двоичный файл переводят в base64: три байта превращаются в четыре символа. Отсюда рост на треть, плюс переносы строк каждые 76 знаков.

Алина Т.
Алина Т.
Новичок
сообщений 190
с апр, второй сезон
8 июня, 11:05#5

то есть надо делить объявленный потолок на 1.37?

Наиль Габдуллин
Наиль Габдуллин
Знаток
сообщений 1885
с мар
15 ноября, 14:22#6

Примерно так, я в скриптах беру запас пожёстче: множитель 1.4 и минус пара сотен килобайт на шапку.

Порядок, которым считаю перед отправкой пачки:

import os
potolok = 36700160                 # SIZE из EHLO
fayl = "/tmp/maket.pdf"
syroy = os.path.getsize(fayl)
posle = (syroy + 2) // 3 * 4       # base64
posle += posle // 76 * 2           # переносы строк
shapka = 4096                      # заголовки и границы MIME
print(syroy, "->", posle + shapka, "потолок", potolok)
print("влезет" if posle + shapka < potolok else "режем")

Числа сходятся с тем, что реально уходит по проводу, сверял на десятке файлов.

Теперь по вашей задаче. Один и тот же файл ведёт себя по-разному, потому что потолки у приёмников свои и часто разведены по направлениям: на приём одно число, на отдачу другое. Плюс у корпоративных ящиков сверху накручен потолок самого ящика, и он бывает ниже серверного.

разбираю чужие конфиги за печенье
kvadrat_ru
kvadrat_ru
Участник
сообщений 855
с июл
22 апреля, 17:39#7

Добавлю про архивы. Класть pdf в zip смысла мало, он и так сжат, выигрыш процента три. А вот разбить архив на части по 8 МБ и отправить тремя письмами проходит почти везде.

Только предупредите получателя, иначе он соберёт две части из трёх и пойдёт ругаться.

Ирина Пахомова
Ирина Пахомова
Новичок
сообщений 280
с янв, второй сезон
1 сентября, 08:56#8

Три части по восемь это уже неудобно для того, кто на той стороне. А ссылка на файл вместо вложения нормально смотрится в деловой переписке?

МаринаК
МаринаК
Знаток
сообщений 1120
с мая
8 февраля, 11:13#9

Нормально, если ссылка живёт на вашем же домене и открывается без входа. Многие приёмники смотрят, куда ведут ссылки внутри письма, и совпадение с доменом отправителя работает в плюс.

Я так и делаю с макетами: в письме превью на 200 КБ и ссылка на полный файл. Отказов по весу нет вообще, получателю тоже удобнее: открыл с телефона, посмотрел, скачал уже за столом.

ferrum
ferrum
Участник
сообщений 660
с сен
15 июля, 14:30#10

Учтите про превью. Картинку прикладывайте вложением с cid и ссылайтесь на неё из html. Вставленная прямо в разметку base64 раздувает тело, и часть клиентов её всё равно не покажет.

Алина Т.
Алина Т.
Новичок
сообщений 190
с апр, второй сезон
22 декабря, 17:47#11

проверила свой рабочий ящик, там строки SIZE в ответе нет совсем. это значит, что потолка нет или просто про него молчат? письма на 15 мб уходят, на 40 возвращаются, но текст отказа приходит уже от чужого сервера

kvadrat_ru
kvadrat_ru
Участник
сообщений 855
с июл
1 мая, 08:04#12

Молчат. Отсутствие SIZE говорит только о том, что сервер не хочет объявлять потолок заранее, сам потолок при этом есть почти всегда.

Проверяется вилкой: шлёте себе письма с файлом по возрастанию, 10, 20, 30, 40 МБ, и смотрите, где приходит отказ. Пять минут работы, зато цифра своя и точная. Записать её в скрипт отправки и забыть.

Наиль Габдуллин
Наиль Габдуллин
Знаток
сообщений 1885
с мар
8 октября, 11:21#13

Вилку лучше гонять через swaks с --quit-after DATA. Письмо тогда не ложится в ящик получателя, отказ по весу при этом возвращается как обычно.

разбираю чужие конфиги за печенье
Ирина Пахомова
Ирина Пахомова
Новичок
сообщений 280
с янв, второй сезон
15 марта, 14:38#14

Собрала всё в одну заметку и переделала отправку. Теперь в письме превью и ссылка на макет, вложением уходит только то, что легче 8 МБ. Потолки трёх основных подрядчиков померила вилкой, записала рядом с адресами.

За формулу с множителем отдельное спасибо, считала раньше по весу файла и удивлялась отказам.