home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / CODE_UPLOAD60195232000.psc / popmodule.bas < prev    next >
Encoding:
BASIC Source File  |  2000-05-23  |  12.1 KB  |  402 lines

  1. Attribute VB_Name = "popmail"
  2. 'This was programmed by  Joseph Ninan
  3. ' email - josephninan@crosswinds.net
  4. ' S4-Computer Science and engineering
  5. ' SCT College of engineering
  6. ' Trivandrum, Kerala, India
  7. ' Phone - 0091-471-594477
  8. 'Home address
  9. 'Liju Bhavan
  10. 'Muttampuram Lane
  11. 'Sreekariyam PO
  12. 'Trivandrum
  13. 'Kerala State
  14. 'India
  15. 'PIN 695017
  16. ' www.jofu.8m.com
  17.  
  18. 'Add this to your form_load event()
  19.     'ok, we have to start winsock, DUH!
  20.     'Call StartWinsock("")
  21.     'lets subclassing the handle
  22.     'for the connection we are going to make
  23.     'Call Hook(Form1.hWnd)
  24.     
  25. 'Also this to your form terminate event
  26. 'Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  27.     'lets close the connection
  28.     'Call closesocket(mysock)
  29.     'lets unhook the hwnd so we dont
  30.     'get an error
  31.     'Call UnHook(Form1.hWnd)
  32. 'End Sub
  33.  
  34. Option Explicit
  35.  
  36. Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  37. Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  38. Public Const GWL_WNDPROC = -4
  39. Public lpPrevWndProc As Long
  40. Public mysock As Long
  41. Public Progress, mProgress As Integer
  42. Public MailContent, rtncode As Variant
  43. Public pop_error As Boolean
  44. Public e_err, e_errstr, timeout As Variant
  45. Public RecvBuffer, MessageDetail, MsgListDetail As String
  46. Public ReadFlag As Boolean
  47.  
  48.  
  49.  
  50. Public Function Hook(ByVal hWnd As Long)
  51.     'ok, we are going to catch ALL msg's sent
  52.     'to the handle we are subclassing (form1)
  53.     lpPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
  54. End Function
  55.  
  56. Public Sub UnHook(ByVal hWnd As Long)
  57.     'if we dont un-subclass before we shutdown
  58.     'the program, we get an illigal procedure error.
  59.     'fun.
  60.     Call SetWindowLong(hWnd, GWL_WNDPROC, lpPrevWndProc)
  61. End Sub
  62. Public Function FindField(s_temp As Variant, s_field As Integer) As Variant
  63.     Dim l, firstpos, lastpos, i, fieldcount
  64.     s_temp = s_temp & " "
  65.     'Removing extra spaces
  66.     'Finding fields
  67.     l = Len(s_temp)
  68.     firstpos = 1
  69.     For i = 1 To l
  70.         If Mid(s_temp, i, 1) = " " Then
  71.             lastpos = i
  72.             fieldcount = fieldcount + 1
  73.         End If
  74.         If fieldcount = s_field Then
  75.             FindField = Mid(s_temp, firstpos, lastpos - firstpos + 1)
  76.             Exit Function
  77.         Else
  78.             firstpos = lastpos
  79.         End If
  80.     Next i
  81. End Function
  82.  
  83.  
  84. Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  85. Dim x As Long
  86. Dim wp As Integer
  87. Dim temp As Variant
  88. Dim ReadBuffer(1000) As Byte
  89. 'Debug.Print uMsg, wParam, lParam
  90.     Select Case uMsg
  91.         Case 1025:
  92.             Debug.Print uMsg, wParam, lParam
  93.             'Log uMsg & "  " & wParam & "  " & lParam
  94.             e_err = WSAGetAsyncError(lParam)
  95.             e_errstr = GetWSAErrorString(e_err)
  96.             
  97.             If e_err <> 0 Then
  98.                 Log "Error String returned -> " & e_err & " - " & e_errstr
  99.                 Log "Terminating...."
  100.                 pop_error = True
  101.                 'Exit Function
  102.             End If
  103.             Select Case lParam
  104.             Case FD_READ: 'lets check for data
  105.                     x = recv(mysock, ReadBuffer(0), 1000, 0) 'try to get some
  106.                     If x > 0 Then 'was there any?
  107.                         ReadFlag = False
  108.                         RecvBuffer = StrConv(ReadBuffer, vbUnicode) 'yep, lets change it to stuff we can understand
  109.                         Log RecvBuffer
  110.                         rtncode = Mid(RecvBuffer, 1, 3)
  111.                         'Log "Analysing code " & rtncode & "..."
  112.                         Select Case rtncode
  113.                         Case "+OK"
  114.                             Progress = Progress + 1
  115.                             If Progress = 5 Then
  116.                                 MsgListDetail = RecvBuffer
  117.                             End If
  118.                             Log ">>Progress becomes " & Progress
  119.  
  120.                         Case "-ERR"
  121.                             pop_error = True
  122.                         Case Else
  123.                             If Progress = 5 Then
  124.                                 MessageDetail = RecvBuffer
  125.                                 Progress = Progress + 1
  126.                             End If
  127.                             If Progress = 11 Then
  128.                                 MailContent = RecvBuffer
  129.                                 Progress = Progress + 1
  130.                             End If
  131.  
  132.  
  133.                         End Select
  134.                     End If
  135.             Case FD_CONNECT: 'did we connect?
  136.                     mysock = wParam 'yep, we did! yayay
  137.                     'Log WSAGetAsyncError(lParam) & "error code"
  138.                     'Log mysock & " - Mysocket Value"
  139.  
  140.             Case FD_CLOSE: 'uh oh. they closed the connection
  141.                     Call closesocket(wp)   'so we need to close
  142.             End Select
  143.     End Select
  144.     'let the msg get through to the form
  145.     WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
  146. End Function
  147.  
  148. Public Sub Log(ByVal sText As String)
  149.     ' this way it doesnt refresh the whole thing every time, no blinking...
  150.     With Form1.txtStatus
  151.         .SelStart = Len(.Text)
  152.         .SelText = sText & Chr$(13) & Chr$(10)
  153.         .SelLength = 0
  154.     End With
  155.  
  156. End Sub
  157.  
  158.  
  159. Public Function popconnect(m_host, m_port, m_user, m_pass As String) As Integer
  160. 'popconnect=-5  Misc
  161. 'popconnect--4   Timeout
  162. 'popconnect =-3  Invalid password
  163. 'popconnect =-2  Invalid user
  164. 'popconnect =-1  POP Mail - Sever connect met with some error
  165. 'Else popconnect returns the no of email messages in your box
  166. Dim temp, timeout As Variant
  167.     Progress = 0
  168.     pop_error = False
  169.     timeout = Timer + 60
  170.     Log "Will timeout in 60 seconds"
  171.     'make sure the port is closed!
  172.     If mysock <> 0 Then Call closesocket(mysock)
  173.  
  174.     'let's connect!!!       host            port       handle
  175.     temp = ConnectSock(m_host, m_port, 0, Form1.hWnd, True)
  176.     Log "Connect socket return value" & temp
  177.     Log "Connected to " & m_host & " at port " & m_port
  178.     If temp = INVALID_SOCKET Then
  179.         Log "Error -Invalid Socket"
  180.         popconnect = -1
  181.         Exit Function
  182.     End If
  183.     While mysock = 0  'make sure we are connected
  184.         DoEvents
  185.         If pop_error = True Then
  186.             Log "Error .. No connection"
  187.             popconnect = -1
  188.             Exit Function
  189.         End If
  190.     Wend
  191.     timeout = Timer + 60
  192.     Log "Connection Established..."
  193.     While Progress < 1
  194.         DoEvents
  195.         If pop_error = True Then
  196.             Log "Error trying to connect to POP server"
  197.             popconnect = -1
  198.             Call closesocket(mysock)
  199.             mysock = 0
  200.             Exit Function
  201.         End If
  202.         If Timer > timeout Then
  203.             Call closesocket(mysock)
  204.             popconnect = -4
  205.             mysock = 0
  206.             Log "Timeout while trying to connect to server"
  207.             Exit Function
  208.         End If
  209.     Wend
  210.  
  211.  
  212.     Log ">USER " & m_user
  213.     Call SendData(mysock, "USER " & m_user & vbCrLf)
  214.     
  215.     
  216.     While Progress < 2
  217.         DoEvents
  218.         If pop_error = True Then
  219.             Log "Invalid Username"
  220.             popconnect = -2
  221.             Call closesocket(mysock)
  222.             mysock = 0
  223.             Exit Function
  224.         End If
  225.         
  226.         If Timer > timeout Then
  227.             Call closesocket(mysock)
  228.             mysock = 0
  229.             Log "Timeout after sending user info"
  230.             popconnect = -4
  231.             Exit Function
  232.         End If
  233.     Wend
  234.     
  235.     Log ">PASS " & m_pass
  236.     Call SendData(mysock, "PASS " & m_pass & vbCrLf)
  237.     While Progress < 3
  238.         DoEvents
  239.         If pop_error = True Then
  240.             
  241.             Call closesocket(mysock)
  242.             mysock = 0
  243.             Log "Invalid Password"
  244.             popconnect = -3
  245.             Exit Function
  246.         End If
  247.         If Timer > timeout Then
  248.             Call closesocket(mysock)
  249.             mysock = 0
  250.             Log "Timeout at progress step " & Progress
  251.             popconnect = -4
  252.             Exit Function
  253.         End If
  254.     Wend
  255.     
  256.     
  257.     Log ">STAT"
  258.     Call SendData(mysock, "STAT" & vbCrLf)
  259.     While Progress < 4
  260.         DoEvents
  261.         If pop_error = True Then
  262.             Log "Error in between getting pop details"
  263.             popconnect = -5
  264.             Call closesocket(mysock)
  265.             mysock = 0
  266.             Exit Function
  267.         End If
  268.         If Timer > timeout Then
  269.             Call closesocket(mysock)
  270.             mysock = 0
  271.             Log "Timeout after sending STAT"
  272.             popconnect = -4
  273.             Exit Function
  274.         End If
  275.     Wend
  276.     Log ">LIST"
  277.     Call SendData(mysock, "LIST" & vbCrLf)
  278.     While Progress < 5
  279.         DoEvents
  280.         If pop_error = True Then
  281.             Log "Error in between pop after LIST"
  282.             popconnect = -5
  283.             Exit Function
  284.         End If
  285.         
  286.         If Timer > timeout Then
  287.             Call closesocket(mysock)
  288.             mysock = 0
  289.             Log "Timeout after sending" & Progress
  290.             popconnect = -4
  291.             Exit Function
  292.         End If
  293.     Wend
  294.     'Log MsgListDetail
  295.     While Progress < 6
  296.         DoEvents
  297.         If pop_error = True Then
  298.             Log "Error in between pop after LIST"
  299.             popconnect = -5
  300.             Exit Function
  301.         End If
  302.         
  303.         If Timer > timeout Then
  304.             Call closesocket(mysock)
  305.             mysock = 0
  306.             Log "Timeout after sending" & Progress
  307.             popconnect = -4
  308.             Exit Function
  309.         End If
  310.     Wend
  311.     'Log MessageDetail
  312.     popconnect = Val(FindField(MsgListDetail, 2))
  313.  
  314. End Function
  315. Public Function getmail(mail_no As Integer, DeleteFlag As Boolean) As Variant
  316.     Dim WholeMail, atemp
  317.     Progress = 10
  318.     Log mysock
  319.     WholeMail = ""
  320.     atemp = 100
  321.     Progress = 10
  322.     Log ">RETR " & mail_no
  323.     timeout = Timer + 20
  324.     Call SendData(mysock, "RETR " & mail_no & vbCrLf)
  325.     While Progress < 11
  326.         DoEvents
  327.         If pop_error = True Then
  328.             Log "Error in between pop "
  329.             Exit Function
  330.         End If
  331.         
  332.         If Timer > timeout Then
  333.             Call closesocket(mysock)
  334.             mysock = 0
  335.             Log "Timeout after sending" & Progress
  336.             Exit Function
  337.         End If
  338.     Wend
  339.     'While atemp = 0
  340.     'Progress = 11
  341.     While Progress < 12
  342.         DoEvents
  343.         If pop_error = True Then
  344.             Log "Error in between pop "
  345.             Exit Function
  346.         End If
  347.         
  348.         If Timer > timeout Then
  349.             Call closesocket(mysock)
  350.             mysock = 0
  351.             Log "Timeout after sending" & Progress
  352.             Exit Function
  353.         End If
  354.     Wend
  355.  
  356.     WholeMail = WholeMail & MailContent
  357.     atemp = InStr(1, MailContent, vbCrLf & "." & vbCrLf, vbTextCompare)
  358.     'Wend
  359.     If DeleteFlag = True Then
  360.         Call SendData(mysock, "DELE " & mail_no & vbCrLf)
  361.         Progress = 20
  362.         While Progress < 21
  363.             DoEvents
  364.             If pop_error = True Then
  365.                 Log "Error in between pop after DELE"
  366.                 Exit Function
  367.             End If
  368.         
  369.             If Timer > timeout Then
  370.                 Call closesocket(mysock)
  371.                 mysock = 0
  372.                 Log "Timeout after sending" & Progress
  373.                 Exit Function
  374.             End If
  375.         Wend
  376.     End If
  377.  
  378.     getmail = WholeMail
  379.  
  380. End Function
  381. Public Sub PopQuit()
  382.     Call SendData(mysock, "QUIT" & vbCrLf)
  383.     Progress = 30
  384.     While Progress < 31
  385.         DoEvents
  386.         If pop_error = True Then
  387.             Log "Error in between pop after QUIT"
  388.             Exit Sub
  389.         End If
  390.         
  391.         If Timer > timeout Then
  392.             Call closesocket(mysock)
  393.             mysock = 0
  394.             Log "Timeout after sending" & Progress
  395.             Exit Sub
  396.         End If
  397.         
  398.     Wend
  399.     
  400.     Call closesocket(mysock)
  401. End Sub
  402.