Can anyone help me with vb code to retrieve email attachments with pop3. I manage to read the mails, but not to download and save any attachments. (i am not looking for dll's that are under purchase license)
here's the code i use to read the mails:
Private Sub CmdGetMsgs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdGetMsgs.Click
Connect()
getMesgs(Val(MsgCount.Text))
End Sub
Sub Connect()
If POP3.Connected = True Then
CloseServer()
POP3 = New TcpClient(PopHost, Integer.Parse(PortNm))
ret_Val = 0
Exit Sub
Else
Me.Cursor = Cursors.WaitCursor
POP3 = New TcpClient(PopHost, Integer.Parse(PortNm))
NetworkS_tream = POP3.GetStream()
m_sslStream = New SslStream(NetworkS_tream)
m_sslStream.AuthenticateAsClient(PopHost)
Read_Stream = New StreamReader(m_sslStream)
ListBox1.Items.Add(Read_Stream.ReadLine())
server_Command = "USER " + UserName + vbCrLf
m_buffer = System.Text.Encoding.ASCII.GetBytes(server_Command.ToCharArray())
m_sslStream.Write(m_buffer, 0, m_buffer.Length)
ListBox1.Items.Add(Read_Stream.ReadLine())
server_Command = "PASS " + WW + vbCrLf
m_buffer = System.Text.Encoding.ASCII.GetBytes(server_Command.ToCharArray())
m_sslStream.Write(m_buffer, 0, m_buffer.Length)
ListBox1.Items.Add(Read_Stream.ReadLine())
'Send STAT command to get information ie: number of mail and size
server_Command = "STAT " + vbCrLf
m_buffer = System.Text.Encoding.ASCII.GetBytes(server_Command.ToCharArray())
m_sslStream.Write(m_buffer, 0, m_buffer.Length)
ListBox1.Items.Add(Read_Stream.ReadLine())
End If
Me.Cursor = Cursors.Default
'Get Messages count
StatResp = ListBox1.Items(ListBox1.Items.Count - 1)
server_Stat = StatResp.Split(" ")
MsgCount.Text = server_Stat(1)
MsgCount.Update()
ret_Val = 1
'Get list of E-mails, where E-mail count = msgcount.text (3-Oct-2012)
If ret_Val = 0 Then
ListBox2.Items.Add("You are not connected, please connect")
Exit Sub
Else
End If
End Sub
Sub getMesgs(ByVal Num_Emails As Integer)
If Not IsNumeric(MsgCount.Text) Then
MsgCount.Text = "error : Restart App."
Exit Sub
End If
Dim List_Resp As String
Dim I As Integer
Cursor = Cursors.WaitCursor
ProgressBar1.Value = 0
ProgressBar1.Maximum = Num_Emails
ProgressBar1.Step = 1
Me.Cursor = Cursors.WaitCursor
For I = 1 To Num_Emails
ProgressBar1.PerformStep()
List_Resp = SendCommand(m_sslStream, "LIST " & I.ToString)
ListBox2.Items.Add(List_Resp)
Next I
ProgressBar1.Value = 0
Me.Cursor = Cursors.Default
End Sub
Function SendCommand(ByVal SslStrem As SslStream, ByVal Server_Command As String) As String
Server_Command = Server_Command & vbCrLf
m_buffer = System.Text.Encoding.ASCII.GetBytes(Server_Command.ToCharArray())
m_sslStream.Write(m_buffer, 0, m_buffer.Length)
Read_Stream = New StreamReader(m_sslStream)
Server_Reponse = Read_Stream.ReadLine()
Return Server_Reponse
End Function
Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
If e.Button = Windows.Forms.MouseButtons.Right Then
ContextMenuStrip1.Show(Me, e.Location)
End If
End Sub
Private Sub CmdDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdDisconnect.Click
Me.Cursor = Cursors.WaitCursor
WW = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
CloseServer()
Me.Cursor = Cursors.Default
End Sub
Sub CloseServer()
On Error Resume Next
StatResp = SendCommand(m_sslStream, "QUIT ") & vbCrLf
ListBox1.Items.Add(StatResp)
ListBox2.Items.Clear()
TextBox1.Text = String.Empty
MsgCount.Clear()
POP3.Close()
ret_Val = 0
End Sub
Private Sub ListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
'Retrieve E-mails by Index
Dim XX As String
Dim sZTMP As String
Me.Cursor = Cursors.WaitCursor
Try
TextBox1.Clear()
Index_Num = (ListBox2.SelectedIndex + 1).ToString
XX = ("RETR " + Index_Num.ToString & vbCrLf)
m_buffer = System.Text.Encoding.ASCII.GetBytes(XX.ToCharArray())
m_sslStream.Write(m_buffer, 0, m_buffer.Length)
Read_Stream = New StreamReader(m_sslStream)
Read_Stream.ReadLine()
sZTMP = Read_Stream.ReadLine + vbCrLf
Do While Read_Stream.Peek <> -1
sZTMP = Read_Stream.ReadLine + vbCrLf
TextBox1.Text += (sZTMP)
Loop
Catch ex As Exception
MsgBox(ex.Message)
End Try
Me.Cursor = Cursors.Default
End Sub
End Class