Привет All! Требуется помощь и консультация от вас. Суть проблемы: - есть приложение (Win32), которое генерит письма. За шаблон и наполнение письма берет русских текст из базы. Письма сваливаются в хрен знает какой кодировке. Такое ощущение, восьмой бит "отрезается" при обработке прогой текста для генерации письма. А теперь вопрос: Подскажите, в какую сторону копать? Я так понимаю, что надо прогнать через например WDASM, найти определенную функцию установки чарсета, затем модифицировать значения, которые передаются через стек в эту функцию и тогда возможно будет шанс, что все будет ок. Я правильно рассуждаю? Если да, то подскажите, какая это можент быть апишная функция? С лету так и не смог определить... Спасибо!
Попробуй поискать отдельные выражения из следующего тега. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows1251] Отдельной функции установки чарсета нет. В программе должна быть функция, которая преобразует текст письма в определенную кодировку. + смотри в какой кодировке по умолчанию ждет почтовый сервер текст письма. Если они не совпадают, а в тексте письма не указана кодировка, то как раз твой случай.
Content-Transfer-Encoding: 7BIT Content-Type: %s; charset=US-ASCII Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: Quoted-Printable Content-Type: Text/Plain; charset=US-ASCII Content-Transfer-Encoding: 8BIT Content-Transfer-Encoding: BINARY Content-Type: %s; name="%s"; type=%s Application/Octet-stream -- Вот этот текст в самом бинаре. То есть теперь мне надо использую Айс поставить бряк на эту область памяти - гед находиться текст, и когда будет обращение к этой памяти - посмотреть какая функция вызывает? Или тупо заменить везде 7BIT на 8BIT прям в exe?
>>прога твоя nonascii не поддерживает . скорее всего >>так что суши вёсла Странный подход Ладно, видимо уже из принципа пробить придется.
Тебе проще дизасемблировать текст Ida. После чего и принимать решение об изменении. Я бы сначала попытался изменить строку Content-Type: Text/Plain; charset=US-ASCII на Content-Type: Text/Plain; charset=windows 1251
По своему опыту написания smtp клиента. Тебе нужно: 1. Определить язык програмирования и библиотеку доступа. 2. Найти функцию, которая преобразовывает твой текст в US-ASCII 3. Найти функцию, которая преобразовывает текст US-ASCII в кодировку почтовика (по умолчанию). (преобразование в ней убрать или сделать для твоей кодировки). Первый пункт самый важный, так как позволяет определить причины искажения текста.
при чём тут странный подход восьмой бит отрывается программой - smtp сервером единственное решение сделать прокси smtp который будет перекодировать письма и отсылать через нормальный smtp
Не ты не прав. Это зависит от настроек по умолчанию. И большинство наших серверов используют кодировку koi8-r Так как Unix (Linux) используют, где в почтовых серверах давно 8 битные кодировки используются. Тоже верно и для Exchange
Простейщий способ проверки это подключится к нему напрямую и набить письмо. Если он действительно испортит текст, то тогда действительно только замена smtp сервера приемника поможет на другой (без прокси, так как такой вариант всеравно будет текст портить)
DenKor нет , не будет как же он будет портить если ты его так напишешь, чтобы он всё в 7 бит переводил но если надо , то можно сделать так , чтобы портил
Странный - то что ты предложил просто "забить". Приложекние само по себе является сервером - оно работает с БД и генерит рассылки - эта софтина TestTrack Pro. DenKor ухху, сегодня вечером займусь поисками!
Ребят, я что то не совсем понимаю вашу терминалогию. А именно вы, понимаете под терминалогией smtp сервер. Все программы, которые отсылают письма делают это через smtp сервис почтовой программы (она принимает запросы по 25 порту - дефолт). Никакими серверами они при этом не являются. Все современные почтовые сервера из коробки используют 8 битную кодировку. Соответсвено они могут испортить текст письма, только если принимают письмо в неуказанной кодировке и их дефаултная кодировка не совпадает с кодировкой письма. Я имею ввиду почтовые серверы провайдеров. Ввиду этого, SliderNode проше всего: 1) убрать всякое преобразование текста в письме (чтобы получить нормальный текст в определенной руской кодировке, взятой из БД) 2) Проставить в Mime теге правильную кодировку текста письма. При этом он должен иметь ввиду, что по стандарту тема письма должна быть в формате Quoted-Printable, иначе руский текст там может быть испорченным. (Там не указывается кодировка) Имхо стоит ознакомиться с MIME-Version: 1.0 и форматом комманд smtp сессии.