Конференция ".Net" » Аутентификация POP-before-SMTP (system.net.mail)
 
  • Иксик © (23.03.07 18:18) [0]
    Здравствуте,

    Встретился с такой проблемой: mail сервер использует метод аутентификации POP-before-SMTP, т.е. для отправки почты нужно сначало залогиниться по протоколу POP. Поэтому стандартные методы отправки почты не работают (запись данных в web.config или динамическое присваивание), сервер говорит: You must authenticated before you can use this server. Причем то же самое он говорит, когда я просто подключаюсь через telnet по 25-му порту, если я до этого не авторизовался по 110-му.

    Нашел в нете вот такое извращенское решение на VB, кот. сначала логиниться по 110-му:

    #Region "POP Access"
    Private s As System.Net.Sockets.NetworkStream
    Private t As New System.Net.Sockets.TcpClient
    Private Connect As Boolean = False

    Public Sub ServerConnect(ByVal Server As String)
    'open port 110 on the server
    Try
    'catch any error resulting from a bad server name
    t.Connect(Server, 110)
    s = t.GetStream()
    If Microsoft.VisualBasic.Left(getdata(), 3) = "+OK" Then
    Connect = True
    'MessageBox.Show(getdata())
    End If
    Catch ex As Exception
    MessageBox.Show(Err.Description)
    End Try
    End Sub

    Public Function Logon(ByVal User As String, ByVal Password As String) As Boolean
    Dim cmd As String

    Logon = False

    'make sure there is a connection
    If Connect Then
    'Send username
    cmd = SendCmd("user " + User)

    'If successful, send the password
    If Microsoft.VisualBasic.Left(cmd, 3) = "+OK" Then
    cmd = SendCmd("pass " + Password)
    'If successful, set logon flag
    If Microsoft.VisualBasic.Left(cmd, 3) = "+OK" Then
    Logon = True
    End If
    End If
    End If
    End Function

    Public Function logoff() As String
    If Connect Then
    logoff = SendCmd("QUIT")
    End If
    End Function

    Private Function SendCmd(ByVal Cmd As String) As String
    Dim bCmd As Byte()
    'byte encode the command
    bCmd = System.Text.Encoding.ASCII.GetBytes(Cmd + vbCrLf)

    'send the data
    s.Write(bCmd, 0, bCmd.Length)
    SendCmd = getdata()
    End Function

    Private Function getdata() As Byte
    Dim bData(t.ReceiveBufferSize) As Byte
    'get the response
    s.Read(bData, 0, bData.Length)
    'return the response
    getdata = System.Text.Encoding.ASCII.GetString(bData)
    End Function
    #End Region

    Перевести это не проблема, наверное, но неужели это единственный способ и нет иного? Как-то сложно получается Буду очень благодарен за любую помощь.
  • WondeRu © (23.03.07 18:49) [1]
    Поищи на codeproject.com статью про доступ к POP из C#. Там уже есть  готовые компоненты с исходным кодом. Может поможет
  • Иксик © (24.03.07 00:58) [2]

    > WondeRu ©   (23.03.07 18:49) [1]

    Спасибо!

    Друзья, проблема решена переговорами с хостером и предоставлением другого smtp сервера.
 
Конференция ".Net" » Аутентификация POP-before-SMTP (system.net.mail)
Есть новые Нет новых   [134427   +35][b:0][p:0]