Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/36: Рейтинг темы: голосов - 36, средняя оценка - 4.53
1 / 1 / 0
Регистрация: 06.11.2009
Сообщений: 17

Проблема с кодировкой входящих писем. почтовый клиент. приём почты. POP3.

06.11.2009, 00:39. Показов 7287. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скачал класс ( прогу в коде ) POP3 стороннего разработчика для приемё писем. http://www.codeproject.com/KB/... ient.aspx? Подключаюсь к почте, могу узнать количество входящих сообщений, и их заголовки и письмо на английском и размер. Если же заголовок или письмо в кирилице, то принимаем иероглифы. Это было у разработчика в оригинале
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public string RETR (int msg)
        {
            string temp="";
            
            if (state != connect_state.TRANSACTION )
            {
                //the pop command RETR is only valid in the TRANSACTION state
                temp="Connection state not = TRANSACTION";
            }
            else
            {
                // retrieve mail with number mail parameter
                issue_command ("RETR "+ msg.ToString ());                
                temp=read_multi_line_response();
               
                            }
            return(temp);
 
        }
.

Получает номер сообщения и начинает его принимать в темп, если я правильно понял.
Погуглив думал проблема решиться с помощью декодировки. Но не могу понять как и где использовать
C#
1
System.Text.Encoding.GetEncoding(1251).GetBytes (Strings)
Помогите разобраться с этим декодером. Ковырялся долг и нудно. И в разных кодировках. Кстати м ещё тот факт что письма тоже приходят в разных кодировках. В принципе это курсач - может прокатит и если тема будет на латинице и письмо на латинице, но всё таки может кто нибудь поможет.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.11.2009, 00:39
Ответы с готовыми решениями:

Почтовый клиент.POP3. Расшифровка писем с почты mail.ru
Подскажите, пожалуйста, как можно из строки (String) в которой находится текст письма зашифрованный в Base64, получить строку String (не...

Почтовый клиент. Получение писем через POP3
Собственно ниже приведен код программы, но письма не приходят, подскажите что почем? Например pop.yandex.ru, порт 995. void __fastcall...

Как сделать приём почты через POP3?
Я сделал отправку почты проге, осталось сделать приём почты через POP3. Проблема в том, что НИГДЕ нет инфы как это сделать. Кучу сайтов уже...

4
1 / 1 / 0
Регистрация: 01.03.2010
Сообщений: 26
27.04.2010, 13:57
Тоже столкнулся с проблемой кодировок. Подключаюсь к мылу, считываю кол-во сообщений новых - всё нормлаьно. А вот когда получаю список отправителей и заголовок писем вылетает ошибка. Я так подозреваю, что из-за различных кодировок писем. Код ниже:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
            string response;
            string from = null;
            string subject = null;
            int totmessages;
            try
            {
                mailclient = new TcpClient("pop3.mail.ru", 110);
            }
            catch (SocketException)
            {
                status.Text = "Unable to connect to server";
                return;
            }
            ns = mailclient.GetStream();
            sr = new StreamReader(ns);
            sw = new StreamWriter(ns);
            response = sr.ReadLine(); //Get opening POP3 banner
            sw.WriteLine("User " + "*****"); //Send username
            sw.Flush();
            response = sr.ReadLine();
            if (response.Substring(0, 3) == "-ER")
            {
                status.Text = "Unable to log into server";
                return;
            }
            sw.WriteLine("Pass " + "*****"); //Send password
            sw.Flush();
            try
            {
                response = sr.ReadLine();
            }
            catch (IOException)
            {
                status.Text = "Unable to log into server";
                return;
            }
            if (response.Substring(0, 4) == "-ERR")
            {
                status.Text = "Unable to log into server";
                return;
            }
            sw.WriteLine("stat"); //Send stat command to get number of messages
            sw.Flush();
            response = sr.ReadLine();
            string[] nummess = response.Split(' ');
            totmessages = Convert.ToInt16(nummess[1]);
            if (totmessages > 0)
            {
                status.Text = "you have " + totmessages + " messages";
            }
            else
            {
                status.Text = "You have no messages";
            }
            status.Refresh();
            for (int i = 1; i <= totmessages; i++)
            {
                sw.WriteLine("top " + i + " 0"); //read header of each message
                sw.Flush();
                response = sr.ReadLine();
                while (true)
                {
                    if (response == ".")
                        break;
                    if (response.Length > 4)
                    {
                        if (response.Substring(0, 5) == "From:")
                            from = response;
                        if (response.Substring(0, 8) == "Subject:")         // тут вылетает ошибка. в response хранится "q=dns", хотя реальная тема письма - другая.
                            subject = response;
                    }
                }
                messages.Items.Add(i + " " + from + " " + subject);
                messages.SelectedIndex = messages.Items.Count - 1;
                messages.Refresh();
            }
0
3 / 3 / 1
Регистрация: 15.01.2010
Сообщений: 23
19.02.2011, 23:11
sr = new StreamReader(ns);
sw = new StreamWriter(ns);


измени на:

sr = new StreamReader(ns, Encoding.GetEncoding("koi8-r"));
sw = new StreamWriter(ns, Encoding.GetEncoding("koi8-r"));





KOHCTAHTNH,
попробуй так:
System.Text.Encoding.GetEncoding("koi8-r").GetBytes

проблема в том, что нужно задавать не номер кодовой таблицы а название.
Для русского языка подходит "koi8-r",
для украинского "koi8-u"
1
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 18
04.04.2011, 00:58
Столкнулся с такой же проблемой, подскажите как задать кодировку в таком случае:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 private string Response()
            {
                System.Text.ASCIIEncoding oEncodedData = new System.Text.ASCIIEncoding();
                byte[] ServerBuffer = new Byte[1024];
                NetworkStream NetStream = GetStream();
                int count = 0;
                // считываем данные из сетевого потока сервера и помещаем их в буфер (чтобы потом декодировать)
                while (true)
                {
                    byte[] buff = new Byte[2];
                    int bytes = NetStream.Read(buff, 0, 1);
                    if (bytes == 1)
                    {
                        ServerBuffer[count] = buff[0];
                        count++;
                        if (buff[0] == '\n')
                        {
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                // Возвращаем декодированное строковое ASCII-значение
                string ReturnValue = oEncodedData.GetString(ServerBuffer, 0, count);                
                return ReturnValue;
            }
0
hanip
03.08.2011, 10:48
Кому нибудь удалось получить письмо на русском языку, выложите пример перекодировки.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.08.2011, 10:48
Помогаю со студенческими работами здесь

Перенос входящих писем из Оутлук на почтовый сервер
Настроил Microsoft Outlook 2007 на работу с ящиком мэил.ру. После запуска программа приняла все письма с сервера мэил.ру и почистила...

Почтовый клиент по POP3 протоколу
Добрый день! Я пытаюсь разобраться как сделать получение писем в почте, но столкнулся с проблемой. MessageCount = ...

Простейший почтовый клиент POP3 на С++
Уважаемый форумчане, мне нужна программа, которая выдает количество писем на почтовом ящике с помощью протокола POP3. Другими словами,...

SMTP,POP3,IMAP Почтовый клиент
Во общем smtp клиентское приложение должно отправлять письма на сервер(насколько я понял)а с этого сервера письмо уже будет отправлено...

Приём писем с почты
Здравствуйте! С отправкой писем проблем не возникло, а вот инструкий по получению писем я не нашёл. Цель: принимать письма, после чего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru