strike1984 » 23.08.2006 (Ср) 11:50
Я пишу программу почтовый сервер с автоответчиком, отправка почты работает нормально, прием хромает. Хотя добивался чтобы, он не обращал внимания на эту ошибку 457, но и измений не происходило в listview, или сообщения суммировались каждый раз с нажатием кнопки.
Function Exist(sKey As String) As Boolean
Dim Item
On Error Resume Next
Set Item = mCol.Item(sKey)
If Err.Number = 0 Then Exist = True
On Error GoTo 0
End Function
Public Sub Add(oMessage As CMessage, Optional sKey As String)
If Len(sKey) = 0 Then
mCol.Add oMessage
Else
If Not Exist(sKey) Then mCol.Add oMessage, sKey 'ОШИБКА ЗДЕСЬ
End If
End Sub
Private Sub ListMessages()
Dim oMes As CMessage
Dim lvItem As ListItem
For Each oMes In m_colMessages
Set lvItem = lvMessages.ListItems.Add(Key:=oMes.MessageID) 'Ошибка здесь, я немного доработал, и она непостоянная, даже если программа срабатывает правильно второй раз, что я вижу по msgbox, то проблема именно с listview
lvItem.Key = oMes.MessageID 'Работает независимо, комментирую эту строку или нет
lvItem.Text = oMes.From
lvItem.SubItems(1) = oMes.Subject
lvItem.SubItems(2) = oMes.SendDate
lvItem.SubItems(3) = oMes.Size
Next
Еще не могу понять ошибку, почему winsock не закрывает connect.
Case POP3_RETR
strBuffer = strBuffer & strData
If InStr(1, strBuffer, vbLf & "." & vbCrLf) Then
strBuffer = Mid$(strBuffer, InStr(1, strBuffer, vbCrLf) + 2)
strBuffer = Left$(strBuffer, Len(strBuffer) - 3)
Set m_oMessage = New CMessage
m_oMessage.CreateFromText strBuffer
m_colMessages.Add m_oMessage, m_oMessage.MessageID
Set m_oMessage = Nothing
strBuffer = ""
If intCurrentMessage = intMessages Then
m_State = POP3_QUIT
Winsock1.SendData "QUIT" & vbCrLf
Debug.Print "QUIT"
Else
intCurrentMessage = intCurrentMessage + 1
m_State = POP3_RETR
Winsock1.SendData "RETR " & _
CStr(intCurrentMessage) & vbCrLf
Debug.Print "RETR " & intCurrentMessage
' скорее всего в этой части, выполнение POP_QUIT должно ссылаться на несколько строк выше.
End If
End If
Case POP3_QUIT
Winsock1.Close
Call ListMessages
End Select
Else
Winsock1.Close
MsgBox "POP3 Error: " & strData, _
vbExclamation, "POP3 Error"
End If