WINSOCK X EMAIL

MAICONCARDOSO 28/05/2016 15:50:15
#462677
Olá pessoal!!!

Estou precisando criar uma rotina para apenas fazer a contagem de quantidades de emails de uma caixa específica, para isto estou usando winsock. Acontece que quando já conectado não estou conseguindo atualizar a contagem, ou seja, se o winsock estiver conectado e esta caixa receber ou deletar algum email ele continua contando a mesma quantidade da primeira consulta. Já tentei winsock.close e realizar conexao de novo porém da um erro.

Segue o código que estou usando:

  Dim received As Boolean
Dim Message$
Dim sckError


Private Sub Form_Load()
[ô] LogIn to the server ~ get settings from outlook express
Winsock1.Connect [Ô]imap.bittencourtcardoso.com[Ô], 110

Do Until received: DoEvents: Loop

If sckError Then MsgBox [Ô]An error occured trying to connect to server[Ô]: Exit Sub

sendMsg [Ô]USER promocao@bittencourtcardoso.com[Ô] [ô] Send UserName
If sckError Then MsgBox [Ô]Error with username[Ô]: Exit Sub

sendMsg [Ô]PASS 123456[Ô] [ô] Send Password
If sckError Then MsgBox [Ô]Error with password[Ô]: Exit Sub
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData Message$

Select Case Winsock1.Tag
Case [Ô]RETR[Ô]
Put #1, , Message$

If InStr(Message$, vbLf + [Ô].[Ô] + vbCrLf) Then
Close 1
received = True
End If

Case Else
sckError = (Left$(Message$, 3) = [Ô]-ER[Ô])
received = True
End Select
End Sub

Private Sub Winsock1_Close()
Winsock1.Close
End Sub

Private Sub cmdCheckMail_Click()
[ô] Get Number of Messages and total size in bytes
sendMsg [Ô]STAT[Ô]
x = InStr(Message$, [Ô] [Ô]): b = InStrRev(Message$, [Ô] [Ô])
Messages = Val(Mid$(Message$, x + 1, b - x))
Size = Val(Mid$(Message$, b + 1))

MsgBox [Ô]Number of messages to download [Ô] & Messages

[ô] Download all messages
For a = 1 To Messages

[ô] Winsock1_DataArrival will save message as [Ô]Email-1.eml[Ô], [Ô]Email-2.eml[Ô] etc
Winsock1.Tag = [Ô]RETR[Ô]
Open [Ô]C:\Windows\Temp\eMail-[Ô] & a & [Ô].eml[Ô] For Binary Access Write As #1

sendMsg [Ô]RETR [Ô] & a
List1.AddItem [Ô]eMail [Ô] & a & [Ô]: Downloaded[Ô]
Next

Winsock1.Tag = [Ô][Ô]
End Sub

Sub sendMsg(m$)
Winsock1.SendData m$ + vbCrLf

received = False
Do Until received
DoEvents
Loop
End Sub

KERPLUNK 28/05/2016 17:42:41
#462678
Você sabe o que o código faz? Compreende o que está acontecendo? Já tentou depurar?
MAICONCARDOSO 28/05/2016 19:26:47
#462679
Sim, o código eu entendi, ja depurei também, mas o que eu nao entendi foi o fato da conexão não se atualizar. Quando o winsock está conectado ao meu servidor eu consigo apenas manipular os dados desta primeira conexao.
O erro que acontece é quando tento encerrar a conexao e abrir novamente para tentar atualizar os dados, na verdade não precisaria eu acho que nao precisaria fechar e abrir a conexao para que os dados fossem atualizados.
é o meu primeiro contato com winsock, talvez tenha alguma parâmetro que eu não esteja usando corretamente, mas fiz várias pesquisas e não descobri nada.
KERPLUNK 28/05/2016 20:28:16
#462680
Lógico que precisa! Não é algo [Ô]ativo[Ô] de duas vias. Você abre, pega ou envia dados e acabou. Para buscar dados, ou você envia comandos novamente ou faz todo o processo. Veja o que acontece quando você clica o botão [Ô]cmdCheckMail[Ô], ele envia o comando [Ô]STAT[Ô], o servidor vai enviar de volta os e-mails, que vão ser recebidos no evento DataArrival, que por sua vez salva os emails em arquivos [Ô].eml[Ô]. Então para verificar se tem e-mail, eu colocaria aquela rotina em um timer de x em x segundos ao invés de clicar em um botão.
MAICONCARDOSO 29/05/2016 08:27:03
#462684
Exatamente, eu estou acionando o botão indiretamente, através de outra rotina no sistema, inclusive este formulário trabalha invisível. Mas até aí tudo bem, o que eu não consegui resolver foi atualizar as informações como eu falei, eu conecto o winsock tem por exemplo 3 emails lá, eu apago um desses emails e executo o código [Ô]cmdCheckMail[Ô] e ele continua me dizendo que tem 3 emails lá e quando o certo seriam dois.
KERPLUNK 29/05/2016 13:29:41
#462687
Você está apagando os e-mails no client ou no server?
MAICONCARDOSO 31/05/2016 10:16:02
#462799
Estou apagando no server...
KERPLUNK 31/05/2016 18:58:19
#462826
No server? Tem alguma outra aplicação com Winsock que faz isso? Se você está apagando o e-mail no outlook ou qualquer outro que o valha, você não está apagando no server
MAICONCARDOSO 01/06/2016 09:01:59
#462842
Eu só estou apagando manualmente para testar.. mas enfim... achei uma solução e já está funcionando aqui. O meu problema era com a conexão/desconexão do winsock, então eu fiz um executável com um timer que chama outro programa, este outro abre a conexao, verifica os emails fecha e vai embora.
Resolvido!

Muito obrigado pelo interesse em ajudar meu caro!!
Tópico encerrado , respostas não são mais permitidas