-
Здравствуте,
Встретился с такой проблемой: 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
Перевести это не проблема, наверное, но неужели это единственный способ и нет иного? Как-то сложно получается Буду очень благодарен за любую помощь.
-
Поищи на codeproject.com статью про доступ к POP из C#. Там уже есть готовые компоненты с исходным кодом. Может поможет
-
> WondeRu © (23.03.07 18:49) [1]
Спасибо!
Друзья, проблема решена переговорами с хостером и предоставлением другого smtp сервера.
|