Newsgroup: it.comp.lang.visual-basic
Titolo: Richiesta aiuto: Winsock ed SMTP

salve a tutti...
ho un problema nell'inviare automaticamente una e-mail da vb, utilizzando il
controllo Winsock. Premetto che i comandi che invio al server SMTP sono
corretti (ho utilizzato per comodità 
smtp.libero.it
 sulla porta 25) e che
con un altro programma (una specie di emulatore Telnet che ho fatto qualche
tempo fa come esercizio di programmazione), riga per riga riesco a spedire
tranquillamente la e-mail...
posto qui sotto le parti più significative del codice:
Dim ricevi As String
'ricevo i dati che mi invia il server SMTP e li inserisco nella stringa
ricevi
Private Sub Winsock2_DataArrival(ByVal bytestotal As Long)
  Winsock2.GetData Dalserver, vbString
  ricevi = Dalserver
End Sub
' con questa procedura attendo che in ricevi sia scritto qualcosa, segno che
il server
' ha risposto... presumo correttamente perché i comandi inviati sono
corretti
Private Sub delay()
  Do While ricevi = ""
    DoEvents
  Loop
End Sub
'questa é la spedizione vera e propria... invio il comando, aspetto che il
server risponda, ripulisco la stringa ricevi e passo all'operazione
successiva...
Private Sub cmdInvia_Click()
 Dim stringatemp As String
 Winsock2.Connect "
smtp.libero.it
", 25
 delay
 ricevi=""
 Winsock2.SendData "HELO 
pot...@italiano.it
 (62.10.12.69)" & vbCrLf
 delay
 ricevi=""
 Winsock2.SendData "MAIL FROM:<>" & vbCrLf
 delay
 ricevi=""
 Winsock2.SendData "RCPT TO:<" & txtDestinatario.Text & ">" & vbCrLf
 delay
 ricevi=""
 Winsock2.SendData "DATA" & vbCrLf
 delay
 ricevi=""
 Winsock2.SendData "FROM: " & txtMittente.Text & vbCrLf
 delay
 ricevi=""
 Winsock2.SendData "TO: " & txtDestinatario.Text & vbCrLf
 delay
 ricevi=""
 Winsock2.SendData "SUBJECT: " & txtOggetto.Text & vbCrLf
 delay
 ricevi=""
 Winsock2.SendData vbCrLf
 delay
 ricevi=""
 stringatemp = txtMessaggio.Text     'in sostanza questo é il corpo del
messaggio
 Winsock2.SendData stringatemp & vbCrLf
 delay
 ricevi=""
 Winsock2.SendData "." & vbCrLf   'simbolo di fine trasmissione
 delay
 ricevi=""   'credo sia inutile, ma si sa mai
 Winsock2.Close
End Sub
'e ora... perché ca**o non va? :-p
grazie a tutti coloro che mi risponderanno
--
Fabio Ruini
(
fabi...@libero.it
)
"Dio giudica l'albero dai frutti, non dalle radici" (Paulo Coelho)



la solita risposta è
 "   C*O*S*A non va? "

   ricevi=""
Non so se sia per questo, ma dopo i  comandi successivi al DATA (Tranne dal
punto che segna la fine di DATA in poi) non devi aspettare risposta dal
server, perchè, oltre a non risponderti, con la routine che usi per ricevere
dati non hai neanche la possibilità di uscire dopo un determinato tempo nel
caso il server non dia segni di vita... impallandoti così tutto il
programma. Quindi suggerisco di togliere delay e ricevi = "" da dopo FROM a
prima del punto e inoltre di modificare così delay:
Private Sub delay()
  Dim Tempo as Long, Inizio as Long
  Inizio = GetTickCount
  Do While ricevi = "" And Tempo < 60000
    DoEvents
    Tempo = GetTickCount - Inizio
  Loop
End Sub
In modo da prevedere una condizione di uscita se il server non rispondesse.
Ciao

 ha scritto nel messaggio
news:qrru6.66929$yl2.6...@news1.tin.it...


 ha scritto nel messaggio
news:ulpu6.722$dJ6....@news.infostrada.it...


 >  delay
[...]

 Vittorio
Non mi ricordo se c'era una soluzione migliore per effettuare piů
connessioni una dopo l'altra (per piů connessioni contemporaneamente serve
necessariamente una matrice di winsock), comunque il problema esiste e non č
colpa tua.
Puoi perň fare un altro mail from senza chiudere la connessione con quit, in
modo da usare lo stesso controllo winsock
Ciao