Newsgroup: it.comp.lang.visual-basic
Titolo: Una cosa da nulla(spero)

Salve a tutti,
sono uno che è alle prime armi con il Vb (anzi primissime ho messo mano 
appena ieri), e naturalmente poichè per ora non ho alcuna guida mi sono 
scervellato a capire qualcosa utilizzando guide trovate qui e lì per la 
rete e qualche esempio della guida.
La cosa su cui mi sto cimentando è la creazione di client vari, per irc, 
per l'invio di email, e cose del genere giusto per farmi un po' 
d'esperienza.
Sono però andato incontro a questo problema:
Mettiamo che volessi creare un prog che invia email sfruttando un server 
smtp qualsiasi.
OK
Costruisco un form con:
text1 : campo DA
text2 : campo A
text3 : campo SERVER
text4 : campo TESTO
Label1 : campo RISPOSTA SERVER
command1 : pulsante CONNETTI
command2 : pulsante INVIA EMAIL
Winsock1
Nel codice scrivo:
Private Sub Command1_Click()
    Winsock1.Connect Text3.Text, 25  'connessione al server impostato
End Sub                              'impostato in text3
'---------------------------------------------------
Private Sub Command2_Click()
    Winsock1.SendData "Helo 
user.it
"                   'riconoscimento da 
    Winsock1.SendData "MAIL FROM:<" & text1.text & ">" 'parte del server
    Winsock1.SendData "RCPT TO:<" & text2.text & ">"   'e invio email
    Winsock1.SendData "DATA"
    Winsock1.SendData Text4
    Winsock1.SendData ""
    Winsock1.SendData "."
    Winsock1.SendData ""
End Sub
'-------------------------------------------------------
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)      'imposto
Winsock1.GetData Dati, vbString                   'dataArrival e getdata
Label1.Caption = Dati                'la risposta verrà visualizzata in 
text5
End Sub
'-------------------------------------------------------
Ecco fatto questo avvio il mio bel programmino, clicco su connect vedo 
che la lucina della connessione si accende segno che qualcosa si muove... 
:) e ricevo su label1 il messaggio del server. Clikko su invio e non 
succede nulla! Ne mi arriva qualcosa nella casella di posta... nulla di 
nulla!!! Qual è il difetto del mio programma?? 
Grazie a tutti.
byez
-- 
---==[aLEAnDER]==---

Questo é un messaggio di risposta standard e quindi impreciso, viene inviato
in genere a chi si é da poco affacciato al NG e potrebbe non contenere le
risposte in maniera diretta...
1)  Controlla il subject! Subject tipo: "Aiutooooo", "!!!", "Non ci sto più
dentro", "Sto impazzendo" sono subject che vengono filtrati da quasi
tutti... (Escluso il sottoscritto ancora per un po') e quindi non vengono
nemmeno letti dal 90% dei partecipanti (forse meno, ma comunque tanti)
2) Prima di postare sul NG sarebbe bene seguire un certo iter:
    a) Cercare nell' Help (alias MSDN ove possibile)
    b) Cercare nei vecchi post... Se ne hai pochi... non c'é problema, qui
ci sono quelli degli ultimi 6 anni (circa):
 
http://groups.google.com/advanced_group_search
    c) Cercare sul sito comune 
http://www.it_lang_vb.net
...Comunque almeno i post vecchi, MSDN e il subject sono vitali...
                        Ciao
                                Allanon
P.S.= Mi dispiace... ma di IRC non so niente... :(
P.P.S.=Non ti arrabbiare per questo messaggio, é solo una dritta per il
futuro...

 futuro...
Figurati anzi cercavo proprio il sito del NG.
Byez
-- 
---==[aLEAnDER]==---

Ciao,
generalmente i protocolli prevedono un flusso di dati strutturato in maniera
tale da poter gestire i vari eventi.
l'Smtp segue la stessa regola, quindi per ciascun comando send di invio del
tuo programma dovrai intercettare la relativa risposta dal lato server che
ti indica l'esito dell'operazione.
le tue routine, quindi, debbono essere implementate da una sub di attesa del
risultato dell'operazione, per evitare di inviare al server i comandi quando
esso non e' ancora in grado di gestirli.
inoltre l'esatta sintassi e' winsock1.sendata <testo> & vbcrlf .
beppe
-----------------------------------------------------------
Visita il sito del WWF AltoFerrarese
http://www.comune.cento.fe.it/wwfaf
-----------------------------------------------------------

 beppe
Okay ma come faccio praticamente? Cioč quale comando di winsock devo 
utilizzare? 
P.S. Ma hai percaso notato anke tu problemi con la guida MSDN di visual 
studio? A me non funziona e non so perkč.
-- 
---==[aLEAnDER]==---

Ciao,
allora ... tanto per cominciare un consiglio: all'inizio del codice utilizza
sempre la Option Explicit. Questa dichiarazione ti permette di vivere e
lavorare decisamente meglio; la puoi impostare dalle opzioni del VB.
Secondo consiglio: utilizza gli strumenti che hai a disposizione ... help in
linea (F1) ... se non ti funziona reinstalla ... ricerca delle vecchie news
http://groups.google.com/advanced_group_search
  ... sito comune
http://www.it-lang-vb.net/
 che ad esempio contiene i sorgenti di programmi
pop & smtp ... ed ultimo, ma non per questo meno importante, la testa, la
fantasia e la voglia di provare. ;o)
Se proprio non riesci ... il NG ... ma secondo me questa dovrebbe essere
l'ultima spiaggia.
Comunque tornando a noi ... il comando e' quello da te gia' usato (getdata)
anche se in posizione e maniera diversa
io ti consiglio di scrivere una function del tipo (vado a braccio):
function attesa (timeout as integer) as string
'//il valore che passo serve per delimitare l'attesa in secondi
dim risposta as string, tempo as long
attesa="0" '//setto la funzione sul valore di timeout
risposta=""
tempo=timer
do while risposta = "" '//attendo la risposta del server
    if timer > tempo + timeout then exit function '//esco per timeout
    '//ecco il comando
    winsock1.getdata risposta '//recupero l'eventuale buffer dati
loop
attesa=left(risposta,3) '//prendo il codice numerico di risposta
end function
a questo punto dopo ogni istanza  senddata attivero' la funzione attesa(ss)
tipo:
dim risposta as string
winsock1.sendata "HELO" & vbcrlf
risposta = attesa(5)
if risposta = "0" or risposta <> "200" then goto GestErr '//timeout o errore
'....
'//continuo ad inviare e ricevere nella stessa maniera
'....
GestErr:
'.....
direi che non e' la soluzione migliore in quanto nella funzione potrei
passare il codice di risposta che attendo per tornare poi un valore boolean
che mi permetterebbe di eliminare la riga di controllo della risposta ecc.
ecc., ma per iniziare a lavorarci sopra e' sufficiente.
Dovrai procurarti anche la documentazione dei protocolli smtp e pop per i
codici di risposta, oltre a tutto cio' che riguarda il mime e gli algoritmi
di de/codifica base64 e uucode.
auguri ;o)


 codici di risposta, oltre a tutto cio' che riguarda il mime e gli algoritmi
grazie 1000 mille mi hai illuminato, certo se quella guida funzionasse... 
(l'ho reinstalalta e niente... vabbč)
ciao e grazie ankora!
-- 
---==[aLEAnDER]==---