Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/40: Рейтинг темы: голосов - 40, средняя оценка - 4.60
46 / 46 / 19
Регистрация: 15.03.2009
Сообщений: 178

Кодировка POP3

25.06.2009, 10:22. Показов 8522. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Для приема почты использую компоненты Indy.
Вопрос следующий: как при выводе аттрибутов письма на listBox вывести корректный текст?

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Indy.Sockets;
using Indy.Sockets.Units;
 
namespace Pochta
{
    public partial class ReceiveMsgForm : Form
    {
        public ReceiveMsgForm()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string xHost = "1.1.1.1";
                string xUsername = "user";
                string xPassword = "pasw";
 
                POP3 xPOP3 = new POP3();
                xPOP3.Username = xUsername;
                xPOP3.Password = xPassword;
                xPOP3.Connect(xHost, 110);
                //xPOP3.Login();
                int xCount = xPOP3.CheckMessages();
                if (xCount == 0)
                {
                    Console.WriteLine("Нет сообщений");
                }
                else
                {
                    Indy.Sockets.Message xMsg = new Indy.Sockets.Message();
 
                    xPOP3.Retrieve(1, xMsg);
                    listBox1.Items.Add("Кому: " + xMsg.Recipients[0].Text.ToString()); 
                    listBox1.Items.Add("От: " + xMsg.From.Text.ToString());
                    listBox1.Items.Add("Тема: " + xMsg.Subject);
                    listBox1.Items.Add("");
                    listBox1.Items.Add(xMsg.Body.ToString());
                }
                xPOP3.Disconnect();
                xPOP3.Dispose();
            }
 
            catch (Exception exc)
            {
               MessageBox.Show(exc.Message);
            }
 
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2009, 10:22
Ответы с готовыми решениями:

Неправильная кодировка в работе с протоколом pop3
Здравствуйте. При написании простого почтового клиента столкнулась с проблемой кодировки, в получаемых сообщениях вместо русских слов...

Почтовый клиент.POP3.Кодировка текста (почта mail.ru)
Я получаю с сервера вот такую строку: =?utf-8?Q?=D0=9C=D0=B8=D1=88=D0=B0_=D0=A1=D0=B5=D1=80=D1=91=D0=B3=D0=B8=D0=BD?= (что здесь лишнее т.е...

Ответ от POP3 пустой
Какие могут быть причины?

22
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.06.2009, 10:39
В смысле корректный?
Чтобы были не кракозябры, а осмысленный текст? Там часто кодировка KOI8(надо смотреть на поля почты), поэтому надо преобразовывать. Как это делать я знаю плохо. Но знаю точно что в Framework есть класс который превосходно перекодирует из разных кодировок.
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
25.06.2009, 10:50
Вопрос сложный, так как для преобразования кодировки некоторые люди написали километры кода, чтобы любую кодировку можно было отобразить правильно.
0
46 / 46 / 19
Регистрация: 15.03.2009
Сообщений: 178
25.06.2009, 11:07  [ТС]
Спасибо всем. Может все-же кто посоветует в каком направлении искать.
Ну, чтобы не переписывать заново "километры кода"
Пишу примерно так:
C#
1
2
3
4
                    byte[] encByte = System.Text.Encoding.Default.GetBytes(xMsg.Recipients[0].Text);
                    string encText = System.Text.Encoding.GetEncoding(1251).GetString(encByte);
 
                    listBox1.Items.Add("Кому: " + encText);
Пока кракозябры...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.06.2009, 11:49
Так ведь классу нужно указывать из какой кодировки в какую ты перекодируешь.
Вот, копирую из одной из своих програм:
C#
1
2
3
4
5
System.Text.Encoding win1251 = Encoding.GetEncoding("windows-1251");
    System.Text.Encoding koi8r = Encoding.GetEncoding("koi8-r");
    byte[] koi8Bytes = koi8r.GetBytes(mystring.Global.News.ToString());
    byte[] winBytes = Encoding.Convert(koi8r, win1251, koi8Bytes, 0, koi8Bytes.Length);
    string winString = koi8r.GetString(winBytes,0,winBytes.Length);
Вместо KOI8R подставляешь свою исходную кодировку.
0
46 / 46 / 19
Регистрация: 15.03.2009
Сообщений: 178
25.06.2009, 12:04  [ТС]
Так тоже не получается
и так тоже:
C#
1
2
byte[] encByte = System.Text.Encoding.GetEncoding("koi8-r").GetBytes(xMsg.Recipients[0].Text);
string encText = System.Text.Encoding.GetEncoding(1251).GetString(encByte);
Вопрос открыт...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.06.2009, 12:10
Ну тогда не знаю.
А ты точно уверен, что у тебя там KOI8 ?
0
46 / 46 / 19
Регистрация: 15.03.2009
Сообщений: 178
25.06.2009, 12:19  [ТС]
Первый раз с таким сталкиваюсь. Все другие кодировки нормально перекодируются.
Подозреваю что-то не так просто с этим koi8...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.06.2009, 12:21
Повторяю еще раз:
А ты точно уверен, что у тебя там KOI8 ?
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
25.06.2009, 12:23
Ещё может быть что в base64
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.06.2009, 12:25
Ведь когда ты получаешь письмо, то там есть поле, в котором записано, что кодировка тут такая-то. Глянь туда.
0
46 / 46 / 19
Регистрация: 15.03.2009
Сообщений: 178
25.06.2009, 12:45  [ТС]
Вроде в oulook Express адрес получателя пишется в этой кодировке. Сейчас уже сомневаюсь.

Добавлено через 4 минуты 21 секунду
Проверила письма этого отправителя - все с кодировкой koi8.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.06.2009, 12:51
Скинь эти крякозябры сюда(только чистые, без твоих перекодировок).
0
46 / 46 / 19
Регистрация: 15.03.2009
Сообщений: 178
25.06.2009, 13:07  [ТС]
Если имеешь в виду электронное письмо? Не смогла прикрепить.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.06.2009, 13:18
Ну, возьми например в своей программе, создай Текстовое поле, и выведи в него свои
C#
1
2
3
4
5
listBox1.Items.Add("Кому: " + xMsg.Recipients[0].Text.ToString()); 
listBox1.Items.Add("От: " + xMsg.From.Text.ToString());
listBox1.Items.Add("Тема: " + xMsg.Subject);
listBox1.Items.Add("");
listBox1.Items.Add(xMsg.Body.ToString());
А потом скопируй, и вставь сюда. Или скопируй, вставь в блокнот, и файлик прикрепи.
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
25.06.2009, 13:19
Цитата Сообщение от Eva_yk Посмотреть сообщение
Если имеешь в виду электронное письмо? Не смогла прикрепить.
Нужно заархивировать, не все файлы можно прикреплять
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
25.06.2009, 13:43
Да не код программы, а текст письма в кракозяблах
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.06.2009, 13:45
Мы опять друг друга не поняли. Но листинг это тоже правильно.
С листингом я тебе помочь не могу, так как у меня таже VisualStudio нет. Письмо, которое выдает програма(если оно, конечно, не очень личное). Только прежде убери эти строки:
C#
1
2
 byte[] encByte = System.Text.Encoding.GetEncoding("koi8-r").GetBytes(xMsg.Recipients[0].Text);
string encText = System.Text.Encoding.GetEncoding(1251).GetString(encByte);
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
25.06.2009, 13:45
C#
1
2
          byte[] data = Encoding.GetEncoding(1251).GetBytes("уЕЛТЕФЩ");   
            Console.WriteLine( Encoding.GetEncoding("koi8-r").GetString( data ));  //
1
46 / 46 / 19
Регистрация: 15.03.2009
Сообщений: 178
25.06.2009, 13:47  [ТС]
ааааа ясно. Программа выдает ??????? ???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.06.2009, 13:47
Помогаю со студенческими работами здесь

Как пользоваться pop3 в .NET?
кажется ничего родного в .NET для pop3 нет - как же письмо принять то тогда?

Получение писем по POP3 через TcpClient
Здравствуйте, можете показать пример чтения писем с почты, например рамблер, любой рабочий пример tcpclient, не одного рабочего примера не...

POP3 клиент quoted-printable декодирование
Никто не знает? Ну ладно. А как перекодировать из Quoted Printable в нормальный вид? Я использовал следующую конструкцию: public...

Протокол pop3. Прием электронных сообщений
Добрый вечер, прошу помочь: Было задано написать простой почтовый клиент с принятием и отправлением сообщений. Возникли проблемы в...

Компонент или класс для работы с POP3
Кто-нибудь обладает компонентом/классом на C# для работы с POP3, который позволял бы работать с аттачментами и которым 'не жалко...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru