Получение писем

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

krukovis84
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 108
Зарегистрирован: 04.08.2009 (Вт) 11:16
Откуда: Кочевник

Получение писем

Сообщение krukovis84 » 14.02.2012 (Вт) 16:03

Добрый день!
В .NET реализована отправка почты классом System.Net.Mail, а получение не реализовано.
Вопрос - может быть получение писем реализовано энтузиастами в каком нибудь виде и где нибудь лежит для ознакомления? Очень был бы благодарен за примеры. Хочется научится выкачивать почту например с Google и с рабочего сервера.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Получение писем

Сообщение FireFenix » 16.02.2012 (Чт) 4:51

Курить сокеты, POP3 и SMTP протоколы.
Используя гугл .NET + название протокола - ищется все "'энтузиастские протоколы"

К примеру
http://sourceforge.net/projects/hpop/
http://www.codeproject.com/Articles/213 ... IME-Client
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Получение писем

Сообщение iGrok » 16.02.2012 (Чт) 13:48

Про IMAP забыл.
label:
cli
jmp label

krukovis84
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 108
Зарегистрирован: 04.08.2009 (Вт) 11:16
Откуда: Кочевник

Re: Получение писем

Сообщение krukovis84 » 18.02.2012 (Сб) 10:58

Принято. Спасибо.

Arum
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 09.08.2011 (Вт) 0:50
Откуда: Питер

Re: Получение писем

Сообщение Arum » 28.02.2012 (Вт) 14:25

Скачать письма можно так (VB2010 Framework 4)
Код не оптимален, но работает.

Код: Выделить всё
    'закачать письма (использование)
    Private Sub DL_Mail(sLogin As String, sPassword As String)
        Dim sMail As New Pop3Client
        Dim sMailCnt As Integer = sMail.NewConnect("pop3.mail.ru", sLogin, sPassword)
        If sMailCnt = -1 Then sMail.Close() : Exit Sub 'Ошибка коннекта к серверу, либо ящик не существует
        If sMailCnt = -2 Then sMail.Close() : Exit Sub 'Сервер возвратил ошибку
        lblMailCountCur.Text = sMailCnt 'количество писем

        Dim sMailBuffer As StringBuilder = New StringBuilder
        For z = 1 To sMailCnt
            sMailBuffer.Append(sMail.GetMessage(z))
            If Options.OptMail.DeleteMail = True Then sMail.DelMessage(z) 'если нужно удалить письмо, которое скачали
        Next
        sMail.Close()
    End Sub


Код: Выделить всё
Imports System.Net.Sockets
Imports System.IO
Imports System.Text

Public Class Pop3Client
    Private Stream As NetworkStream
    Private sStreamReader As StreamReader
    Private sStreamWriter As StreamWriter
    Private sMessagesCount As Integer ' Количество Сообщений

    'возвращает, сколько писем на сервере
    Public Function NewConnect(ByVal Server As String, ByVal Login As String, ByVal Password As String) As Integer
        On Error GoTo Error_
        Dim tRetMsg As String
        NewConnect = 0
        Stream = New TcpClient(Server, 110).GetStream


        sStreamWriter = New StreamWriter(Stream, System.Text.Encoding.Default)
        sStreamReader = New StreamReader(Stream, System.Text.Encoding.Default, True)

        Dim answer As String

        tRetMsg = SendText("USER " & Login & vbCrLf)
        tRetMsg = SendText("PASS " & Password & vbCrLf)
        tRetMsg = SendText("STAT" & Chr(13) & Chr(10))

        If tRetMsg.Length > 3 Then
            If tRetMsg.Substring(0, 4) = "-ERR" Then
                NewConnect = -2  'ошибка
                Exit Function
            End If
        End If


        tRetMsg = SendText("STAT" & Chr(13) & Chr(10))

        sMessagesCount = Split(tRetMsg, " ")(1)
        NewConnect = sMessagesCount
        Exit Function
Error_:
        NewConnect = -1  'ошибка
    End Function
    Public Function GetMessage(ByVal x As Integer) As String ' x - Номер сообщения
        sStreamWriter.WriteLine("RETR " & x)
        sStreamWriter.Flush()
        Dim j As New System.Text.StringBuilder
        Dim Text As String
        Do
            Text = sStreamReader.ReadLine
            If tRetMsg = "." Then Exit Do
            j.AppendLine(Text)
        Loop
        Return j.ToString
    End Function

   'удалить письмо
    Public Sub DelMessage(ByVal x As Integer)  ' x - Номер сообщения
        sStreamWriter.WriteLine("DELE " & x)    'удалить письмо
        sStreamWriter.Flush()
    End Sub
   
   'отправка команды
    Private Function SendText(ByVal comand As String) As String
        On Error Resume Next
        sStreamWriter.WriteLine(comand)
        sStreamWriter.Flush()
        Return sStreamReader.ReadLine()
    End Function
   'закрыть
    Public Sub Close()
        SendText("QUIT")
        Me.Finalize()
    End Sub
    Protected Overrides Sub Finalize()
        If sStreamWriter IsNot Nothing Then
            sStreamWriter.Dispose()
            sStreamWriter.Close()
        End If
        If sStreamReader IsNot Nothing Then
            sStreamReader.Dispose()
            sStreamReader.Close()
        End If
        If Stream IsNot Nothing Then
            Stream.Dispose()
            Stream.Close()
        End If
        MyBase.Finalize()
    End Sub
End Class



Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList