Results 1 to 3 of 3

Thread: Please help parsing incoming Winsock data

Threaded View

  1. #1

    Thread Starter
    Lively Member
    Join Date
    Apr 2001
    Location
    SF
    Posts
    93

    Please help parsing incoming Winsock data

    Hey guys,

    Im using the Winsock control, the POP3 commands (TOP and DELE), a textbox and a parse message sub. This code adds a Remote Start feature to my program.

    Basically, the code...

    1. Opens Winsock and logs into a POP3 account.
    2. It then gets the subject line of each email and if a subject line word matches the keyword previously entered into the proggy, the Remote Start command then starts.
    3. Also, after the keyword (which is "Dad" in this code) is matched, the code then deletes the applicable email from the server.

    *The way it is now is that Im using the TOP command to get all the email's subject line. Next, the parse message sub then reads the subject line for all emails simultaneously.


    The problem that I need help with is matching up the actual TOP "number" that was sent to retrieve the actual "Keyword" email. Once I have this correct TOP number, I can pass it to the DELE command to delete only the "keyword" email from the server.

    Modifying the Parse message sub is where I need help. This sub uses the For/next statement which loops through all emails in just one Data Arrival
    pass through and since the TOP for/next is also in the Data Arrival event, it only returns "TOP 1" since the parse message is already done.

    So I need the parse message to not loop but return the first emails's subject line which will then match the TOP number. The code then moves to the next email and does the same thing so in the end if the email keyword is Number 7 email then TOP will return 7.

    If someone could help me with parse code that would read one email at a time instead of spinning through them all, I can then match up the TOP number correctly.

    Here's my existing code below...

    Thanks,

    techsent

    'General Declarations

    Code:
    Public prevCmd As String
    Public mailServer As String
    Public username As String
    Public password As String
    Code:
    Private Sub Form_Load()
    prevCmd = ""
    'Set your mailsever, username, and password
    mailServer = "yourPOP3incomingserver"
    username = "yourPOP3username"
    password = "yourPOP3password"
    'Connect to mail server
    Winsock1.Connect mailServer, 110
    End Sub

    Code:
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim data As String
    Dim xstring As String
    Dim u As Integer
    Dim sstring2 As String
    sstring2 = "Dad"
    
    
    For u = 1 To 10
    xstring = "TOP " & (u)
    
    If StrComp(sstring2, Text1.Text, vbTextCompare) = 0 Then
    MsgBox xstring
    Winsock1.SendData "QUIT" & vbCrLf
    DoEvents
    
    Exit For
    
    Else
    
    'Get winsock data and find next command ' to send
    Select Case prevCmd
    Case "USER"
    'Send password
    Winsock1.SendData "PASS " & password & vbCrLf
    prevCmd = "PASS"
    Case "PASS"
    
    Winsock1.SendData xstring & vbCrLf
    DoEvents
    
    'prevCmd = "TOP"
    'Case "TOP"
    
    'get message
    Winsock1.GetData data
    DoEvents
    
    'Parse message
    parseMSG (data)
    DoEvents
    
    Case ""
    'Send username.
    Winsock1.SendData "USER " & username & vbCrLf
    prevCmd = "USER"
    End Select
    End If
    Next u
    
    End Sub
    Code:
    Private Sub parseMSG(data As String)
    
    'Get subject
    Dim dataHold As Variant 'Data Holder for Split function. Creates an array of lines
    Dim epos As Long 'Ending Position for Mid function
    Dim spos As Long 'Starting Position for Mid function
    'Split data where there are vbCrLf chara ' cters. Which is at the end of every line '
    dataHold = Split(data, vbCrLf)
    
    'Examine line of data
    For i = LBound(dataHold) To UBound(dataHold)
    If dataHold(i) <> "" Then 'If the line is not blank then
    'Selects the beginning of each line to s ' ee what info it contains
    Select Case UCase(Left(dataHold(i), InStr(1, dataHold(i), ":")))
    
    Case "SUBJECT:" 'If its the subject
    spos = InStr(1, dataHold(i), ":") + 2 'Starting Position for Mid function
    epos = Len(dataHold(i)) - 1 'Ending Position for Mid function
    Text1.Text = Mid$(dataHold(i), spos, epos - spos + 2) 'Select the middle of the data, not including the beginning tag or the vbCrLf's
    
    End Select
    
    End If
    
    Next i
    
    End Sub
    Last edited by techsent; Jul 5th, 2008 at 10:08 PM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width