Надкусянный контент, или особенности национального mail()'а

Demetrius

Новичок
Надкусянный контент, или особенности национального mail()'а

Пишу класс для отправки писем mail()'ом. (Прим: "проверенный" скрипт даёт тот же результат, и дело скорее всего не в скрипте, а где-то после). Возникла одна очень странная ситуация, объяснения которой найти не могу. Коллеги, может кто сталкивался? ФАКи, поиски и т.п. - смотрел. Итак, суть.

Я создаю base64-кодированную и chunk_split'нутую строку для отправки картинки в письме:
1) В виде аттача;
2) Всё тело письма состоит из картинки и content-type письма "image/...".
Результат один и тот же, а именно: при получении письма, и даже при вскрытии его из очереди smtp-сервера моя картинка оказывается на 5 байт короче. Как выяснилось (методом открывания блокнотом и сравнением файлов), в base64-коде таки да нету пяти байт. В 14-ой, и каждой следующей 13-ой строке (строки стандартные, кажись по 76 символов). Символы выедены произвольные, логики не уловил. Также её нет в позиции символов. Привожу пример (1-ая строчка из неотправленного оригинала, 2-я из готового письма):
1) UQRa1JMKjwgCBjLBhRkgQxJilUQxQqADDXyCACzYnzl8EAUsdEEWjzhAJS4BARcAYxYkQIY8XvAF
2) UQRa1JMKjwgCBjLBhRkgQxJilUQxQADDXyCACzYnzl8EAUsdEEWjzhAJS4BARcAYxYkQIY8XvAF

Как видно, после "QxQ" пропущен "q". Вот так пропали мои 5 байтов, что перманентно приводит к нечитабельности картинки.
Прим.: text/plain&html (не кодированный) доходит нормально.

Я проверял правильность чтения файла и кодирования - всё верно; пытался найти закономерности потерь - тщетно. Известно лишь, что 14-ую и каждую следующую 13-ую строку кто-то или что-то вандальски погрызло. Буду рад выслушать соображения.
 

Фанат

oncle terrible
Команда форума
помножь 14 на 76

-~{}~ 24.12.05 23:30:

заголовки у тебя - Московский Космомолец с руками оторвёт
 

Фанат

oncle terrible
Команда форума
то, что у тебя не строки по 75 символов.
а одна большая.
которую на 1000-м символе режет
 

Demetrius

Новичок
Impossible.
1) Строки у меня нормальные, т.к.:
$message=chunk_split(base64_encode(file_get_contents($this->file)));
2) Выедаются символы внутри строк в произвольном месте.
Или я совсем уже рехнулся...
Может быть это какой-то глюк mail'а и через сокет такого нет? Ещё не пробовал.
 

Demetrius

Новичок
Провёл эксперимент. Предположил, что те строчки, которые укороченные, являются концами длинных строк (из-за неразбития chunk_split) урезанными из-за длины > 1000 (хотя они таки разбитые на 100% правильно до отправки письма). Склеил якобы обратно эти длинные строки. Получилось, что длина первой 1060 с чем-то, остальные одинаковые - примерно 970 (т.е. < 1000), и последняя ещё короче. т.к. просто файл закончился. Следовательно, это не то. Ну и не забываем, что символы выкушаны не в конце строк, а в середине. Честное слово, даже не знаю, что предположить. А ошибка _перманентная_! Может быть это дыра sendmail'а или конфликт с виндой, или ещё что-нибудь нетривиальное? На всякий случай, у меня win98 + Apache/1.3.24 + PHP/4.3.3
Вопрос актуален. Если это и вправду дыра, то надо шо-то решать. :)
 
Сверху