Перекодировка

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Перекодировка

Сообщение Antonariy » 30.01.2007 (Вт) 12:10

Решил написать чистилку почты ибо спам достал, а стандартные клиеты крайне тупы в плане фильтрации по строкам, входящим в сабж и боди. Например, при наличии подмены в слове русской "с" на английскую, элементарно садятся в лужу. :? Вот и буду искать вхождения слов по таблицам подмены.

Для начала нужно конвертировать текст сабжа в читаемый. Имею строку типа =?koi8-r?B?88TBzSDLz9TUxcTW?=
Убирая ненужное получаю 88TBzSDLz9TUxcTW. Еще имею найденный в поиске код:
Код: Выделить всё
Option Explicit

Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal codepage As Long, ByVal dwFlags As Long, _
ByVal lpWideCharStr As String, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal codepage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Long

Private Const MB_PRECOMPOSED = &H1

Public Function Convert(ByVal strSrc As String, ByVal nFromCP As Long, ByVal nToCP As Long) As String
On Error Resume Next
Dim nLen As Long
Dim strDst As String
Dim strRet As String
Dim nRet As Long
    nLen = Len(strSrc)
    strDst = String(nLen * 2, Chr(0))
    strRet = String(nLen * 2, Chr(0))
    nRet = MultiByteToWideChar(nFromCP, MB_PRECOMPOSED, strSrc, nLen, strDst, nLen)
    nRet = WideCharToMultiByte(nToCP, 0, strDst, nRet, strRet, nLen * 2, ByVal 0, 0)
    Convert = Left$(strRet, nRet)
End Function
Делаю Convert("88TBzSDLz9TUxcTW", 20866, 1251), получаю фигу. Где я облажался?

Заодно вопрос: Как перекодировать такое: =?KOI8-R?Q?=F2=E1C=F3=F9=ECO=FE=EB=E9?=
Лучший способ понять что-то самому — объяснить это другому.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 30.01.2007 (Вт) 13:02

88TBzSDLz9TUxcTW - это base64

=F2=E1C=F3=F9=ECO=FE=EB=E9?= - Quoted Printable (может быть ошибся в написании. Сплит по = и дальше каждый символ конвертируешь из hex в asc код. Дальше смотри что получится...
Программисты не глючат - глючат компиляторы...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.01.2007 (Вт) 14:01

Спасибо, все понял.
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.01.2007 (Вт) 16:28

А если русская "с" будет задана как открывающаяся круглая скобка "("? Или как какой-нибудь похожий unicode-символ? Или вообще как "s"?
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.01.2007 (Вт) 17:54

Может быть что угодно, кроме юникода. Так же будут поддерживаться подстановки типа Ы-bl. Пока что ни один из проанализированных сабжей не содержал юникодных подстановок. Появятся - разовью тему. Список подстановок можно будет расширять самостоятельно. Как доделаю, выложу в проекты.
Лучший способ понять что-то самому — объяснить это другому.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Re: Перекодировка

Сообщение Alexanbar » 30.01.2007 (Вт) 18:29

Antonariy писал(а):Решил написать чистилку почты ибо спам достал, а стандартные клиеты крайне тупы в плане фильтрации по строкам, входящим в сабж и боди


Мой клиент не берёт для анализа ни сабж, ни боди.

Боди вообще не вижу смысла анализировать. Если есть тело письма, значит оно уже принято, и его можно грохнуть вручную.

У меня заключение о спаме (точнее, о массовой рассылке) делается в следующих случаях:

1) отправитель не найден в Адресной книге.
2) список получателей содержит более одного получателя или пуст вообще(!)
3) в списке получаетелей указан другой получатель (не я).

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.01.2007 (Вт) 21:42

Боди и я не собираюсь анализировать. А как получить только заголовок?
Лучший способ понять что-то самому — объяснить это другому.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 30.01.2007 (Вт) 22:05

Antonariy писал(а):Боди и я не собираюсь анализировать. А как получить только заголовок?


Команда

Top i 0


где i - номер письма

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Перекодировка

Сообщение alibek » 31.01.2007 (Ср) 8:50

Alexanbar писал(а):1) отправитель не найден в Адресной книге.
2) список получателей содержит более одного получателя или пуст вообще(!)
3) в списке получаетелей указан другой получатель (не я).

1. А как писать новым адресатам? Звонить по телефону и предупреждать, что будет письмо с такого-тоадреса?
2. Бывают списки рассылки, а получатели перечисляются в BCC (которое клиенту не передается).
3. См. п.2.
Lasciate ogni speranza, voi ch'entrate.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Re: Перекодировка

Сообщение Alexanbar » 31.01.2007 (Ср) 19:16

alibek писал(а):1. А как писать новым адресатам? Звонить по телефону и предупреждать, что будет письмо с такого-тоадреса?


Писать можно всем, в том числе, тем, кого нет в адресной книге. И получать можно письма от всех.

Но! Выдаётся предупреждение (в виде иконки напротив письма) , что письмо имеет некие подозрительные признаки.

2. Бывают списки рассылки, а получатели перечисляются в BCC (которое клиенту не передается).


На этом -то и основано детектирование.

Занесите отправителя в Адресную книгу, и письма не будут помечаться как подозрительные. естественно, если адрес не меняется от рассылки к рассылке.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 02.02.2007 (Пт) 14:01

Alexanbar, как удалить письмо с сервера? Отправляю "DELE " & intCurrentMessage, получаю -ERR No such message.

Add: Разобрался.
Лучший способ понять что-то самому — объяснить это другому.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 02.02.2007 (Пт) 16:56

Насколько я понял, физическое удаление письма осуществляется после отсоединения от сервера.

По всей видимости, команда DELE передавалась повторно (для письма, котрое уже удалено).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.02.2007 (Сб) 6:25

Alexanbar писал(а):Насколько я понял, физическое удаление письма осуществляется после отсоединения от сервера.

Не после, а во время (по команде QUIT).
Если просто разорвать связь, они не удалятся.
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 03.02.2007 (Сб) 8:36

Ага. Просто я не сразу заметил, что после Winsock1.Send "DELE " & intCurrentMessage был еще один Winsock1.Send. Да еще к тому же забыл vbCrLf.

Прога готова. Осталось сделать иконку и выложить :)
Лучший способ понять что-то самому — объяснить это другому.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 04.02.2007 (Вс) 20:00

tyomitch писал(а):
Alexanbar писал(а):Насколько я понял, физическое удаление письма осуществляется после отсоединения от сервера.

Не после, а во время (по команде QUIT).
Если просто разорвать связь, они не удалятся.


Я это и имел ввиду. Видимо, неточно выразился.

Кстати, заметил, что серваки почему-то иногда не удаляют письма. Команда dELe проходит, QUIT проходит, а удаление - как повезёт. И вроде ошибок никаких не выдаётся

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 12.02.2007 (Пн) 17:00

А есть способ определить кодировку наверняка? Часто приходят письма, у которых написано =?Windows-1251?Q?=FA=CE=C1=CD=C5=, а реально это koi. Пока что приходится извращаться с правилами русского языка - типа нельзя ставить ъ и ь после гласной и в начале слова, нельзя ставить подряд 4 согласных (хотя такие слова есть).
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.02.2007 (Пн) 18:58

Antonariy писал(а):А есть способ определить кодировку наверняка?

Никакого. Захочу, и напишу письмо с любимым фидошниками заголовком "бНОПНЯ", и будешь потом угадывать, это шутка юмора или глюк почтовика.
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 13.02.2007 (Вт) 10:15

andreymp
Паре строк взяться неоткуда, есть только тема письма :(

Ладно, сделаю ход конем - при невозможности определения кодировки даже по правилам русского языка, буду писать прямой текст и перекодированный в скобках.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 49

    TopList