Newsgroup: it.comp.lang.visual-basic
Titolo: UFFA Winsock atto II

Ciao a tutto il NG.
Ho di nuovo problemi col Winsock.
Non c'e la faccio più.
Sto realizzando il mio programmino ed ho riscontrato altre difficoltà nel
configurare il Winsok (anzichè risolverli i problemi se ne stanno creando
altri)
Qui di sotto vi ho postato il codice sorgente relativa alla perte del
comando che mi serve sistemare.
Il mio programma è una semplice applicazione per spedire mail con
pochissimi campi elencati sotto.
Aiutatemi sto impazzendo anzi peggio.
nella perte generale ho inserito il seguente codice:
Sub
 SendEmail(MailServerName As String, FromName As String, FromEmailAddress As
String, ToEmailAddress As String, EmailSubject As String, EmailAttacment As
String, EmailBodyOfMessage As String)
       Winsock1.LocalPort = 0 ' Setta la porta locale a zero
              If Winsock1.State = sckClosed Then ' Verifica che il socket
sia chiuso
                     DateNow = Format(Date, "Ddd") & ", " & Format(Date, "dd
Mmm YYYY") & " " & Format(Time, "hh:mm:ss") & "" & " -0600"
                     First = "mail from:" + Chr(32) + Text2 + vbCrLf '
E-Mail di chi invia
                     Second = "rcpt to:" + Chr(32) + lstRecipient + vbCrLf '
e-mail ricevente
                     Third = "Date:" + Chr(32) + DateNow + vbCrLf ' Data di
invio
                     Fourth = "To:" + Chr(32) + lstRecipient + vbCrLf '
Ricevente
                     Fifth = "Subject:" + Chr(32) + txtOggetto + vbCrLf '
Soggetto E-mail
                     Sixth = "Attacment:" + Chr(32) + txtAttacment + vbCrLf
' Allegato E-mail
                     Seventh = Messaggio + vbCrLf ' Messaggio E-mail
                     Winsock1.protocol = sckTCPProtocol ' Setta il
protocollo per l'invio
                     Winsock1.RemoteHost = txtSmtp ' Setta l'indirizzo del
server
                     Winsock1.RemotePort = 25 ' Setta la porta SMTP
                     Winsock1.Connect ' Avvia la connessione
                     WaitFor ("220")
                     StatusTxt.Caption = "Connessione in corso...."
                     StatusTxt.Refresh
                     WaitFor ("250")
                     StatusTxt.Caption = "Connessione Effettuata"
                     StatusTxt.Refresh
                     Winsock1.SendData (First)
                     StatusTxt.Caption = "Sto inviando il messaggio"
                     StatusTxt.Refresh
                     WaitFor ("250")
                     Winsock1.SendData (Second)
                     WaitFor ("250")
                     Winsock1.SendData ("data" + vbCrLf)
                     WaitFor ("354")
                     Winsock1.SendData (Eighth + vbCrLf)
                     Winsock1.SendData (Seventh + vbCrLf)
                     Winsock1.SendData ("." + vbCrLf)
                     WaitFor ("250")
                     Winsock1.SendData ("quit" + vbCrLf)
                     StatusTxt.Caption = "Disconnessione"
                     StatusTxt.Refresh
                     WaitFor ("221")
                     Winsock1.Close
              Else
                     MsgBox (Str(Winsock1.State))
              End If
End Sub
Per quanto riguarda il command button (invia) questo è il codice:
Private Sub Command1_Click()
SendEmail txtSmtp.Text, lstRecipient.Text, txtAttacment.Text,
txtOggetto.Text, txtMessaggio.Text
       StatusTxt.Caption = "Invio Messaggio in corso ATTENDERE"
       StatusTxt.Refresh
       Beep
       Close
End Sub
Mi da un errore di argomento non Facoltativo e mi segna in giallo "Private
Sub Command1_Click()"
Cosa ho sbagliato?
Io ho chiamato:
txtOggetto: la textbox per l'oggetto
txtAttacment: quella per l'allegato
lstRecipient: la listbox per gli indirizzi che carica gli indirizzi da un
file txt esterno
txtMessaggio: la textbox per il messaggio
text2: quella per la mia mail
txtSmtp: quella per l'Smtp
Se volete posso anche postarvi in allegato tutto il progetto, mandatemi una
vostra e-mail.
Non c'e la faccio più.


Se non sbaglio hai gią ricevuto una risposta adeguata.
Prima di tutto prova a ragionare su quello che scrivi ... chiedi aiuto in
merito al controllo (ritenendoti pure annoiato dall'instabilitą del
controllo stesso) quando poi i problemi non hanno nulla a che spartire col
suddetto ma quasi sicuramente con il passaggio di parametri alla routine.
Se il compilatore ti restituisce un messaggio di errore relativo ai
parametri, si puņ sapere per quale recondito motivo te la prendi col
malconcio controllo WinSocket ?
Vabbč ... ho detto la mia ...
Saluti




 wrote in message
news:98nf7t$cmn$1...@fe1.cs.interbusiness.it...


If Winsock1.State = sckClosed Then
Non va completamente bene, e ora ti spiego čperche'...
Io stesso, poco tempo fa' (puoi ve4dere i post) ho iniziato ad armeggiare
con il winsock...
E proprio come te, aspettavo che il winsock fosse collegato testando il
Winsock1.State, ma questo non va' bene...
Il Winsock1.State va' bene se vuoi controllare un momento durante la routin
se la connessione esiste ancora, ma non va' bene per attendere che la
connessione sia stata effettuata...
Per fare questo, devi obbligatoriamente usare i vari eventi che ti mette a
disposizione il winsock:
Winsock1_Connect                    ' eseguita non appena si e' connessi al
server
Winsock1_ConnectionRequest   ' eseguita quando ci viene RICHIESTA una
connessione (Funzione solo Server)
Winsock1_DataArrival               ' eseguita quando arrivano dati
Winsock1_SendProgress           ' eseguita all'inizio dell'invio dei dati
Winsock1_SendComplete          ' eseguita alla fine del'invio dati
Winsock1_Error                        ' Indovina :) eseguita quando qualcosa
va' storto
Winsock1_Close                        ' eseguita alla fine della connessione
Io l'ho usato per collegaqrmi alla porta 80 di un server per scaricare dei
file, cmq non credo troverai molte differenze per usarlo tu:
Private Sub Command1_Click()
    Domain = "123.456.789.123"
    Page_URL = "/img/AB1234.jpg"
    File_Download = ""
    Winsock1.Connect Domain, 80      ' <--- Una volta eseguito questo si
passa subito alle routine del winsock!
End Sub
Private Sub Winsock1_Connect()        ' Ok siamo connessi, inviamo i dati al
server nella forma necessaria
    Winsock1.SendData "GET " & Page_URL & Chr(10) & Chr(10)
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)  ' Dati in
arrivo!!!!!
    Winsock1.GetData Dati, vbString
' Prendi i dati che arrivano
    File_Download = File_Download & Dati                                 '
metti i dati in una variabbile (i dati arrivano a pezzi)
    Size.Text = Len(File_Download)
' visualizza la lunchezza attuale del file
    Size_2.Text = Winsock1.BytesReceived                                  '
visualizza i byte realmente inviati dal server
End Sub
Private Sub Winsock1_Close()
    Winsock1.Close                    ' Ok, abbiamo finito, possiamo
chiudere tutto... Buona notte! :)
End Sub
Spero che questo esempio ti possa aiutare, di prove ne ho fatte tante, ho
cercato ovunque su internet per documentarmi e ho stressato un po' sul NG,
ma come vedi ci sono riuscito ;)
Devo scrivere un tutorial per il sito comune sull'utilizzo del winsock, ma
per ora non ho molto tempo a disposizione :P
Per ora accontentati cosi' ;)
Ciao e fammi sapere! ;^)=
PS: Mi daresti le specifiche per inviare una mail utilizzando un server smtp
esterno (mi servono sapere i dati come passarli e i comandi da passare,
anche per i file attach se e' possibile), vorrei farmi una DLL da usare in
ASP...
--
Massimo "Red Foxy" Ciccio'
Home Page: 
http://www.redfoxy.go.to/
Web Master di:
 - Libreria Ciofalo: 
http://www.ciofalo.it
 - Quantum Leap: 
http://ql.programmazione.it
.<-------- Se ricevo spam denuncio l'autore al server ------->.
.o0 ------------------------------------------------------- 0o.
.o0 --------- Dentro ognuno di noi c'e' un animale, ------- 0o.
.o0 ----------- sta' a noi scoprirlo e domarlo ------------ 0o.
.o0 ------------------------------------------------------- 0o.
.o0 --- Non c'e' uomo che non abbia paura dell'animale, --- 0o.
.o0 --------- non esiste uomo che non sia animale --------- 0o.
.o0 ------------------------------------------------------- 0o.
.o0 ------------------------------------------- Red Foxy -- 0o.