har prövat med denna kod från Pellesoft: såhär ska det nog vara... denna koden (med den andra) gör iofs inget mer än att logga in och logga ut... Har prövat JohanD,s förslag och det fungerade med EN ändring felen du får gäller in winsock utan POP3 protokollet. Om man lägger denna kod i den knapp som ansluter hämtar den det mail som har det nummer som man anger: Förstår ej JohanD inlägg. Om du först skickar STAT får du ett svar av typen "+Ok 4 200", sedan kör du "antal=Split(svar, " ")(1)", den plockar ut antalet meddelanden, i detta fallet 4. Sedan får du köra RETR 1, RETR 2 osv tills du har plockat hem så många som svar anger. Fick felmeddelande: Subscript out of range Troligtvis innehåller varibalen svar inte något, den ska innehålla svaret du får från servern (t.ex. "+OK 4 200"). Om du använder den koden du har där uppe kan du göra såhär, svar är en global variabel alltså: Det hamnar inget i varken svar eller antal :( Jag är tveksam till att du kan köra GetData 2 ggr, testa såhär istället: nu hamnar och en del annat först: +Ok 4 200 i svar men får fortfarande fel på antal=Split(svar, " ")(1)", Här är hela koden: Jag har ingen möjlighet att testa nu, men du måste alltså kontrollera svar direkt efter att du har skickat STAT. Jag har ett fungerande exempel du kan få kolla på, ska försöka att posta det här när jag kommer hem. Denna koden fungerar utmärkt för mig, den kontrollerar om det finns några nya mail med det intervall man ställer in på timern... Skapa ett formulär med en textbox (Text1 Multiline=true), en winsock-kontroll (Winsock1) och en timer (Timer1). När du tittar på denna kanske du förstår hur du ska göra för att hämta mailen också... Är tacksam för all hjälp jag har fått, och JohanD, ska titta på din kod så fort jag kan, VB på denna dator har inte någon "Licens" eller vad det nu är, för WinSock, så på denna dator kan jag ej pröva den :( Hej där, jag såg detta forum o tyckte det verka kul o testa saken, jag får ju ditt ex o funka, men det med att hämta mailen går inte med koden Vart lägger du in Winsock1.senddata ("RETR 1 ")? Är du fortfarande ansluten när du gör det? Hej JohanD :) Jag har testat lite men får inget o lira, jag e superdålig på winsock, den kod du la ut ovan funkar ju, kan du visa vart jag lägger in "RETR 1" nånstans? jahaaa:) det förklarar ju lite, ok, nu kan jag ta emot mail, läsa dom men kan jag skicka mail på samma sätt? nått send-kommando? en fråga till: varför får jag inte hela mailet med "retr"? om jag har en timer som kollar så får jag ibland hela mailet o ibland en del.?? Om jag pausar eller kör en breakpoint så verkar det som den hinner med, men hur gör jag? Om du använder en timer kanske den har för kort intervall så att den inte hinner klart innan? Ok, tack, jag har visserligen timer men även om jag kör med manuell uppdatering så kommer tidvis bara delar av mailet...det verkar som att "dataArrival" inte e snabbt nog så att variabeln "a" i din kod inte hinner fyllas innan nästa kod körs. jag testade sleep-funktionen men då pausar jag ju hela programmet, jag vill testa o pausa enbart koden för att "fylla" variabeln "a", kan jag på något vis kontrollera när "a" är klar? Nu hakar jag på också, hos mig går den bara upp, talar om hur många mail jag har och loggar av. Denna kod är nästan samma som den ovan men har "RETR" kommandot med, kolla längre ned, där du hittar ******* mellan ligger "min" kod. Det händer fortfarande inget annant att det kommere "+ok" längstned :( Tar du hela koden som jag skicka in? O du får det inte att funka? Märkligt...För om jag kopierar hela koden o infogar dom kontroller som skall vara med och ställer in user, password och mailservern så lirar det klockrent... Ja jag tar hela koden och infogar döljande kontroler: Jaa-aa du...*funderar* då fattar inte JAG iaf, är det ingen annan på forumet som kan lägga sig i, jag har slut på ideer:) Jag har inte kunnat kolla svaren på detta inlägg, har inte haft tillgång till en dator med intenert anslutning. Tjena, jag har nu mailat dig koden på andersson.johan@beta.telenordia.se, lycka till:-)Winsock
Option Explicit
Public Sub cmdMail_Click()
Txtmail.Text = "Ansluter till mailen..." + vbCrLf
sckmail.Close
sckmail.RemoteHost = "****" 'Istället för "server" skriver du dit din mailserver
sckmail.RemotePort = 110
sckmail.Connect
End Sub
Private Sub sckmail_Connect()
'**** = Secret Information
'Istället för "user" skriver du ditt användarnamn
sckmail.SendData ("****) " + "****)" + vbCrLf)
'Istället för "pass" skriver du ditt lösenord
sckmail.SendData ("****" + "12345" + vbCrLf)
sckmail.SendData ("quit" + vbCrLf)
End Sub
Private Sub sckmail_DataArrival(ByVal bytesTotal As Long)
Dim A As String
sckmail.GetData A
Txtmail.Text = Txtmail.Text + A
End Sub
Men jag får bara: -ERR Unknown Command
-ERR Unknown Command
Och jag vet ej varför, snälla hjälp mig någon som kan WinSockSv: Winsock
<code>
Private Sub sckmail_Connect()
'**** = Secret Information
'Istället för "user" skriver du ditt användarnamn
sckmail.SendData ("user " + "mittnamn" + vbCrLf)
'Istället för "pass" skriver du ditt lösenord
sckmail.SendData ("pass" + "mittlösen" + vbCrLf)
sckmail.SendData ("quit" + vbCrLf)
End Sub
</code>
/JohanSv: Winsock
på raden: sckmail.SendData ("Pass" + "Lösenord" + vbCrLf)
den skulle tydeligen vara: sckmail.SendData ("Pass " + "Lösenord" + vbCrLf).
Vet ej om JohanD har glömt den eller något men nu så kopplar den upp mit servern och ja, sen gör den ige mer ;=(.
Jag har försökt få en att kolla om jag har någe nytt mail, har skickat till mig själv men mitt epost program säger till när jag får mail, vet inte om det är det som är kuxet.
Hoppas på nya svar.
/DemonenSv: Winsock
för att så om du har några mail måste du sända följande kommando:
STAT
mer info:
http://www.vbip.com/winsock/winsock_pop3.aspSv: Winsock
sckmail.SendData ("RETR 1 ")
Nu vill jag att den ska ta hem ALLA medelanden, men vet hur man gör :(
)
Hade tänkt mig något likande som att om man säder:
SckMail.SendData ("STAT ") så får man upp detta: +Ok 4 200
Det menas med att man ha 4 medelanden med sammalagdt 200 minnes plats
jag tänkte att man kunde ta bort allt utom 4,ran så att man kan göra en for i loop som tar hem alla medelanden
Men vet ej hur man gör, om man gör det med selstart eller ej.
Snälla, hjälp mig (IGEN
/DemonenSv: Winsock
Ett tilläg:
Hur tar man hem alla nedelanden som man har.
Med ovanstående kod eller den som jag har så tas bara det nummer som jag avger, jag vill att den ska ta alla.
/DemonenSv: Winsock
/JohanSv: Winsock
antal=Split(svar, " ")(1)",
Vad är antal och svar för variabel
/DemonenSv: Winsock
/JohanSv: Winsock
<code>
Dim Svar As String
Private Sub sckmail_DataArrival(ByVal bytesTotal As Long)
sckmail.GetData Svar
Txtmail.Text = Txtmail.Text + Svar
End Sub
</code>
/JohanSv: Winsock
Så här ser koden ut för DataArrival på winsock kontrolen:
Private Sub sckmail_DataArrival(ByVal bytesTotal As Long)
Dim A As String
sckmail.GetData A
sckmail.GetData Svar
Txtmail.Text = Txtmail.Text + A
Txtmail.Text = Txtmail.Text & vbCrLf & "---------- Nytt medelande ----------" & vbCrLf & vbCrLf
'sckmail.GetData A
'Text1.Text = A
End Sub
Vet ej om jag har lagt det del men.....
Tacksam för svar :)
/DemonenSv: Winsock
Private Sub sckmail_DataArrival(ByVal bytesTotal As Long)
Dim A As String
sckmail.GetData A
Svar = A
Txtmail.Text = Txtmail.Text + A
Txtmail.Text = Txtmail.Text & vbCrLf & "---------- Nytt medelande ----------" & vbCrLf & vbCrLf
'sckmail.GetData A
'Text1.Text = A
End Sub
/JohanSv: Winsock
/DemonenSv: Winsock
Option Explicit
Dim nummer
Dim svar As String
Dim antal
Dim HamtarLista As Boolean
Public Sub cmdMail_Click()
Txtmail.Text = "Ansluter till mailen..." + vbCrLf
sckmail.Close
sckmail.RemoteHost = txtMailServer.Text 'Istället för "server" skriver du dit din mailserver
sckmail.RemotePort = 110
sckmail.Connect
'Timer1.Enabled = True
End Sub
Private Sub Command1_Click()
nummer = InputBox("Ange nummer", "Nummer")
If nummer = "" Then
MsgBox "Du måste ange ett nummer", vbInformation, "Ange nummer"
Exit Sub
Else
'For nummer = 1 To sckmail.RemotePort
getmail
'Next nummer
End If
End Sub
Private Sub Command3_Click()
Dim svar As String
svar = "+Ok 15 200"
MsgBox Split(svar, " ")(1)
MsgBox antal
MsgBox svar
End Sub
Private Sub sckmail_Connect()
'**** = Secret Information
'Istället för "user" skriver du ditt användarnamn
sckmail.SendData ("user " + Txtanvändarnamn.Text + vbCrLf)
'Istället för "pass" skriver du ditt lösenord
sckmail.SendData ("pass " + txtpass.Text + vbCrLf)
Command1.Enabled = True
'sckmail.SendData ("stat ")
' sckmail.SendData ("quit" + vbCrLf)
End Sub
Private Sub sckmail_DataArrival(ByVal bytesTotal As Long)
Dim A As String
sckmail.GetData A
Txtmail.Text = Txtmail.Text + A
Txtmail.Text = Txtmail.Text & vbCrLf & "---------- Nytt medelande ----------" & vbCrLf & vbCrLf
sckmail.GetData A
Text1.Text = A
End Sub
Private Sub getmail()
Txtmail.Text = ""
sckmail.SendData ("RETR " & nummer)
sckmail.SendData ("quit" + vbCrLf)
End Sub
Private Sub Timer1_Timer()
Timer1.Enabled = False
End Sub
Private Sub txtpass_Change()
cmdmail.Enabled = True
If txtpass.Text = "" Then cmdmail.Enabled = False
End Sub
Private Sub GetStat()
'Dim A As String
' sckmail.GetData A
Text1.Text = ""
antal = Split(svar, " ")(1)
'Text1.Text = Text1.Text + A
End Sub
/DemonenSv: Winsock
/JohanSv: Winsock
<code>
Option Explicit
Dim AnvNamn As String
Dim Pass As String
Dim MailServer As String
Dim omg As Integer
Dim SenastAntal As Integer
Private Sub Form_Load()
SenastAntal = 0
AnvNamn = "johan" 'användarnamn på mailservern
Pass = "xxx" 'lösenord
MailServer = "mail.domän.se" 'mailserver
End Sub
Private Sub Timer1_Timer()
omg = 1
txtMail.Text = "Ansluter till mailservern..." + vbCrLf
Winsock1.Close
Winsock1.RemoteHost = MailServer
Winsock1.RemotePort = 110
Winsock1.Connect
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim a As String
Dim antal As Integer
Winsock1.GetData a
txtMail.Text = txtMail.Text + a
Select Case omg
Case 1
If Left(a, 3) = "+OK" Then
Winsock1.SendData ("user " + AnvNamn + vbCrLf)
Else
Winsock1.Close
End If
omg = omg + 1
Case 2
If Left(a, 3) = "+OK" Then
Winsock1.SendData ("pass " + Pass + vbCrLf)
Else
Winsock1.Close
End If
omg = omg + 1
Case 3
If Left(a, 3) = "+OK" Then
Winsock1.SendData ("stat" + vbCrLf)
Else
Winsock1.Close
End If
omg = omg + 1
Case 4
If Left(a, 3) = "+OK" Then
antal = Split(a)(1)
If antal > SenastAntal Then
MsgBox antal - SenastAntal & " nytt/nya mail!"
End If
SenastAntal = antal
Winsock1.SendData ("quit" + vbCrLf)
Else
Winsock1.Close
End If
omg = omg + 1
Case 5
Winsock1.Close
End Select
End Sub
</code>
/JohanSv: Winsock
/DemonenSv: Winsock
"Winsock1.senddata ("RETR 1 ")" jag får "wrong protokol"
vad e felet tro?Sv: Winsock
/JohanSv: Winsock
Jag testade din kod genom att kopiera den till min bärbara och la den i VB och följde dina instruktioner, och kopierade den seden efter att jag har gjort den till en EXE-fil, men :(, den funkade inte tråkigt nog :( :( :( :( :( :( :( :( :( :(
Har inte tid att skriva mer nu, har liktion i skolan.
Hej då och ha det bra
/DemonenSv: Winsock
Sv: Winsock
Sv: Winsock
Sv: Winsock
För att skicka mail används inte POP3-protokollet utan SMTP, se denna tråden: http://www.pellesoft.nu/development/forum/view.asp?msgid=36669&forumid=2
/JohanSv: Winsock
Förstår du vad jag menar nu?:)Sv: Winsock
Mer än så händer inte :(
Försöker modifiera koden så att den tar hem den också.
/DemonenSv: Winsock
Option Explicit
Dim AnvNamn As String
Dim Pass As String
Dim MailServer As String
Dim omg As Integer
Dim SenastAntal As Integer
Private Sub Form_Load()
SenastAntal = 0
AnvNamn = "johan" 'användarnamn på mailservern
Pass = "xxx" 'lösenord
MailServer = "mail.domän.se" 'mailserver
End Sub
Private Sub Timer1_Timer()
omg = 1
txtMail.Text = "Ansluter till mailservern..." + vbCrLf
Winsock1.Close
Winsock1.RemoteHost = MailServer
Winsock1.RemotePort = 110
Winsock1.Connect
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim a As String
Dim antal As Integer
Winsock1.GetData a
txtMail.Text = txtMail.Text + a
Select Case omg
Case 1
If Left(a, 3) = "+OK" Then
Winsock1.SendData ("user " + AnvNamn + vbCrLf)
Else
Winsock1.Close
End If
omg = omg + 1
Case 2
If Left(a, 3) = "+OK" Then
Winsock1.SendData ("pass " + Pass + vbCrLf)
Else
Winsock1.Close
End If
omg = omg + 1
Case 3
If Left(a, 3) = "+OK" Then
Winsock1.SendData ("stat" + vbCrLf)
Else
Winsock1.Close
End If
omg = omg + 1
Case 4
If Left(a, 3) = "+OK" Then
antal = Split(a)(1)
If antal > SenastAntal Then
MsgBox antal - SenastAntal & " nytt/nya mail!"
End If
SenastAntal = antal
'***************************************
Dim mailnr
mailnr = "retr " & antal
Winsock1.SendData (mailnr + vbCrLf)
'****************************************
Winsock1.SendData ("quit" + vbCrLf)
Else
Winsock1.Close
End If
omg = omg + 1
Case 5
Winsock1.Close
End Select
End Sub Sv: Winsock
Resultatet ser ut så här:
Ansluter till mailservern...
+OK Servern ready
+OK
+OK
+OK antalmail byte
+OK
/DemonenSv: Winsock
Sv: Winsock
1 stycke Textbox med namn: Txtmail och prefernces:
Multilanine = True
Scrollbarrs = # Both
1 stycke Timer men namn: Timer1 och intervall = 5000
En Winsock kontrol som jag inte har ändrat något
/DemonenSv: Winsock
Hos mig fungerar det...Sv: Winsock
I alla fall så kan du skicka programet till min hem ePost som är: andersson.johan@beta.telenordia.se
Annars kommer jag inte kunna kolla om du har skickat koden eller ej på ett BRA tag.
M.V.H.
DemonenSv: Winsock