powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблемы с кодировкой при получении email-а POP3
6 сообщений из 6, страница 1 из 1
Проблемы с кодировкой при получении email-а POP3
    #39992365
Nic2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Пытаюсь прочитать почту с pop3.yandex.ru. С подключением к почте всё проходит успешно, однако при попытке прочитать содержимое почты методом GetRawEmail выдаёт данные (отправитель, время отправки, т.д.), а вместо содержимого письма - кучу непонятных символов. При том если зайти на почту вручную и просмотреть содержимое, то с кодировкой проблем не будет. Подробности приложил в скриншоте.

Пытался решить проблему с кодировкой следующим методом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
POP3Client.GetRawEmail(i, sRawEmail) 'выгружаем наше письмо под номером i = 1 в переменную  sRawEmail 

Dim encode As New System.Text.ASCIIEncoding() 'задаём кодировку, пробовал также UnicodeEncoding, UTF8Encoding, UTF7Encoding, UTF32Encoding.

Dim encodedString() As Byte

encodedString = encode.GetBytes( rawEmailString ) 'кодируем

 rawEmailString  = encode.GetString(encodedString) 'присваиваем переменной  rawEmailString  результат кодировки

Но, увы, безуспешно!

В программе также задал русскую культуру:
Код: plaintext
1.
2.
3.
Dim ci As System.Globalization.CultureInfo
ci = New System.Globalization.CultureInfo("ru-RU")
System.Threading.Thread.CurrentThread.CurrentCulture = ci
System.Threading.Thread.CurrentThread.CurrentUICulture = ci

Подскажите, пж, как исправить данную проблему. Спасибо.
...
Рейтинг: 0 / 0
Проблемы с кодировкой при получении email-а POP3
    #39992371
Nic2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прилагаю весь исходный код по взятию почты и выгрузки её в файл ниже

Код: vbnet
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.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
Public Sub GetMail(ByVal m_PopServer As String, ByVal m_User As String, ByVal m_Password As String, Optional ByVal m_ServerPort As Integer = 110, Optional ByVal m_useSSL As Boolean = False, Optional ByVal m_DeleteEmails As Boolean = True, Optional ByVal m_SaveDir As String = vbNullString, Optional ByVal m_SaveMailPrefix As String = "MSG", Optional ByVal m_SaveMailExt As String = ".eml", Optional ByVal m_TraceFunction As Pop3.TraceHandler = Nothing, Optional ByVal m_TestMode As Boolean = False)
        Try
            Dim POP3Client As Pop3.cPop3MailClient
            Dim iNumberOfMails As Integer, iMailboxSize As Integer, sRawEmail As String

            'prepare pop client
            POP3Client = New Pop3.cPop3MailClient(m_PopServer, m_ServerPort, m_useSSL, m_User, m_Password)
            POP3Client.IsAutoReconnect = True

            'if tracing needed
            If m_TraceFunction IsNot Nothing Then
                AddHandler POP3Client.Trace, m_TraceFunction
            End If

            POP3Client.ReadTimeout = 60000 'give pop server 60 seconds to answer

            'establish connection
            POP3Client.Connect()

            'get mailbox statistics
            POP3Client.GetMailboxStats(iNumberOfMails, iMailboxSize)

            If m_TestMode Then
                'get a list of mails
                Dim EmailIds As New List(Of Integer)
                POP3Client.GetEmailIdList(EmailIds)

                'get a list of unique mail ids
                Dim EmailUids As New List(Of Pop3.EmailUid)
                POP3Client.GetUniqueEmailIdList(EmailUids)

                'only show info
                If iNumberOfMails > 0 Then
                    For i As Integer = 1 To iNumberOfMails
                        'get email size
                        POP3Client.GetEmailSize(i)
                    Next
                End If

                'ping server
                POP3Client.NOOP()
            Else
                'get emails
                If iNumberOfMails > 0 Then
                    If Strings.Len(m_SaveDir) = 0 OrElse IO.Directory.Exists(m_SaveDir) = False Then m_SaveDir = My.Application.Info.DirectoryPath
                    If Strings.Len(m_SaveMailPrefix) = 0 Then m_SaveMailPrefix = "MSG"
                    If Strings.Len(m_SaveMailExt) = 0 Then m_SaveMailExt = ".eml"
                    If Strings.Left(m_SaveMailExt, 1) <> "." Then m_SaveMailExt = "." & m_SaveMailExt

                    Dim fToSave, encoded As String
                    fToSave = m_SaveDir & "Message" & m_SaveMailExt

                    For i As Integer = 1 To iNumberOfMails
                        'get email size
                        POP3Client.GetEmailSize(i)

                        'get email
                        sRawEmail = ""
                        POP3Client.GetRawEmail(i, sRawEmail)
                        If Strings.Len(sRawEmail) > 0 Then
                            Try
                                encoded = EncodeString(sRawEmail)
                                IO.File.WriteAllText(fToSave, encoded, System.Text.Encoding.ASCII)
                            Catch
                            End Try
                        End If

                        'delete email
                        If m_DeleteEmails Then
                            POP3Client.DeleteEmail(i)
                        End If
                    Next
                End If
            End If

           'close connection
            POP3Client.Disconnect()

            lblMessage.Text = "Было сохранено мейлов: " & iNumberOfMails
        Catch ex As Exception
            If m_TraceFunction IsNot Nothing Then
                m_TraceFunction("Run Time Error Occured:")
                m_TraceFunction(ex.Message)
                m_TraceFunction(ex.StackTrace)
            End If
        End Try

    End Sub
...
Рейтинг: 0 / 0
Проблемы с кодировкой при получении email-а POP3
    #39992463
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nic2014,

Тебе в .NET форум, это по VB6

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
Проблемы с кодировкой при получении email-а POP3
    #39996762
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nic2014,

POP3+SSL м.б. все таки сделать? Какие соображения?

А чтоб парсить/читать скачанный mail, cdosys.dll готовая (что из VB6 что из .Net), там проблем не возникает, не помню, где-то публиковал здесь наверно коды, попробуй поиск сделать.
...
Рейтинг: 0 / 0
Проблемы с кодировкой при получении email-а POP3
    #39996797
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неверно определённая кодировка так не выглядит. То, что на скриншоте в правой его части, больше всего похоже на бинарные данные в base64.
...
Рейтинг: 0 / 0
Проблемы с кодировкой при получении email-а POP3
    #39996800
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может это данные в скомпрессированном виде?Gzip там какой-то например. Попробуй сделать декомпрессию.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблемы с кодировкой при получении email-а POP3
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]