Guide e Tutorials:indexed | |||||||||||||||||||||||||||||||
Inviare le email (Tutorial completo) Quest'articolo guiderà lungo il percorso che permette di creare un semplicissimo programma per l'invio dei messaggi di posta elettronica. Semplicissimo poichè non si tratta certo di un Eudora o di un Outlook Express... Ci limiteremo infatti ad inviare email di solo testo. Siccome il lavoro da compiere non è difficile ma abbastanza lungo, cominciamo senza tanti discorsi preliminari. Bisognerà innanzitutto aprire un nuovo progetto EXE Standard. Verrà creata una form denominata per default Form1. Come già abbiamo visto per il ricevitore del segnale orario dal server sarà necessario importare il controllo Microsoft Winsock. Per far ciò sarà necessario andare sul menu principale di Visual Basic e selezionare la voce Progetto. Dal menu a discesa che comparirà scegliere a questo punto Componenti. Apparirà dunque una finestra con tutti i controlli o i gruppi di controlli disponibili. Contrassegnare col segno di spunta la voce Microsoft Winsock Control e premere il tasto "Applica". Una volta chiusa la finestra, il controllo sarà disponibile sulla sinistra, nella sezione Generale dell'applicazione Visual Basic. Bisognerà allora semplicemente trascinare il controllo sul piano. Adesso sarà necessario aggiungere ulteriori controlli per gestire l'applicazione in fase di invio della posta. A questo scopo dovremo aggiungere cinque caselle di testo o TextBox, tre pulsanti o CommandButton e quattro etichette o Label. Il risultato dovrebbe essere più o meno quello mostrato dalla figura sottostante: Adesso modifichiamo il titolo dei vari controlli attraverso la proprietà Caption di ognuno di essi. Label1 ad esempio potrebbe essere denominato "Server", Label2 "Da :", Label3 "A :" mentre Label4 potrebbe prendere il nome "Oggetto :". Per questioni di allineamento, è sempre possibile ridimensionare i controlli Label oppure modificarne la proprietà Alignment. Così come abbiamo fatto per le etichette, cambiamo il titolo ai pulsanti. Chiamiamo Command1 "Nuovo", Command2 "Invia" e Command3 "Chiudi". Impostiamo per tutte le cinque TextBox presenti sul piano, la proprietà Text a "" (stringa vuota) in modo da non visualizzare alcun testo all'apertura dell'applicazione. Ecco cosa otterremo: Adesso occupiamoci del pulsante "Nuovo", col quale annulliamo tutte le impostazioni eventualmente accumulate in precedenza e cancelliamo tutti i dati dalla caselle di testo:
Adesso possiamo passare al pulsante "Chiudi" col quale termineremo l'applicazione. Non includiamo un pulsante per la chiusura delle comunicazioni tra l'applicazione ed il server in quanto il processo di invio richiede pochissimi secondi (si tratta di messaggi di solo testo): sarebbe quindi un procedimento inutile:
Terminato questo lavoro di preparazione, possiamo concentrarci sul vero e proprio motore dell'applicazione. Prima di tutto è necessario sapere che per poter inviare dei messaggi di posta elettronica, è necessario utilizzare delle istruzioni in una sequenza ben precisa. Proprio per tracciare questa sequenza, verrà utilizzata una variabile m_State, al cui interno verrà immagazzinato lo stato corrente della sessione SMTP. Stato della sessione che non è altro che un'attesa da parte dell'applicazione di una risposta del server all'invio di un comando da parte dell'applicazione stessa. Quindi la quantità di stati dipende dalla quantità di comandi inviati.
Aggiungiamo dunque nella sezione delle dichiarazioni generali del codice, la succitata variabile m_State che prenderà il valore di uno degli stati elencati nella struttura SMTP_State appena vista:
ed ora ci possiamo concentrare sull'evento Click di Command1 cioè del pulsante "Connetti". Innanzitutto diciamo che il controllo Winsock si deve connettere al server indicato dalla casella di testo TextBox1. Per evitare che la presenza di spazi vuoti non permetta a Winsock di connettersi al server, elidiamo tali spazi vuoti sia all'inizio che al termine della stringa contenuta in TextBox1:
dove 25 è il numero della porta alla quale bisognerà connettersi. 25 è la porta di default per le connessioni SMTP. Infine assegnamo alla variabile m_State lo stato "Connesso":
Attraverso queste poche linee di codice abbiamo creato una connessione tra la nostra applicazione ed il server. Adesso bisogna pensare al trasferimento dei dati tramite l'evento DataArrival di Microsoft Winsock. Tale evento ci permette di conoscere le eventuali risposte del server. Innanzitutto dichiariamo le variabili:
Come già abbiamo detto nella lezione riguardante l'applicazione che recupera dal server l'ora e la data esatte, i dati scaricati dal server vengono memorizzati nel buffer cioè in un'area di memoria usata specificatamente per conservare temporaneamente i dati da trasferire ad un determinato dispositivo. Attraverso il metodo GetData, tali informazioni vengono prelevate dal buffer e posti in una stringa di testo. I dati che inizialmente ci interessa scaricare sono quelli relativi al codice della risposta, che ci indica se il precedente comando che abbiamo inviato è stato ricevuto ed accettato dal server. Il codice della risposta è formato ad esempio dai primi tre simboli della stringa che abbiamo in risposta dal server. Prima però recuperiamo la risposta dal buffer:
e da essa estrapoliamo il codice di risposta attraverso la funzione Left che prende i primi tre caratteri dalla stringa:
Se a questo punto i primi tre caratteri sono uguali a 250 o a 220 o a 354, allora il comando che abbiamo inviato al server è stato accettato:
Adesso che il segnale che abbiamo inviato al server è stato accettato ricontrolliamo lo stato della connessione. Se lo stato precedente era di connessione al server, lo stato passa da MAIL_CONNETTI a MAIL_MITTENTE:
quindi possiamo passare al primo procedimento: l'invio del nome del mittente, che consiste nell' immagazzinare i dati da inviare nella variabile DatiDaInviare, togliendo con la funzione Trim$ gli spazi vuoti dalla stringa inclusa in TextBox2:
dall'indirizzo email recuperiamo il nome che viene prima del simbolo " @ ":
ed infine inviamo i dati del mittente:
Se lo stato è MITTENTE, il passo successivo consisterà nel modificarlo in DA:
qui la variabile DatiDaInviare non necessita di alcuna modifica (tranne la funzione Trim per eliminare gli spazi vuoti), si invia semplicemente l'indirizzo di posta del mittente:
Il passo ancora successivo consiste nell'inviare l'indirizzo email al quale mandare la posta, indirizzo indicato dal contenuto della TextBox3. Se quindi lo stato è MAIL_DA, lo stesso passa a MAIL_A:
e si invia l'indirizzo del destinatario memorizzato temporaneamente nella variabile DatiDaInviare, dopo aver anche qui eliminato gli spazi vuoti:
Facciamo un altro passo in avanti: se lo stato era MAIL_A lo stato passa a MAIL_DATA ed inviamo il comando "DATA"
Ancora avanti: inviamo l'oggetto del messaggio, contenuto nella TextBox4, dopo aver cambiato lo stato da MAIL_DATA a MAIL_CORPO:
Adesso scomponiamo il messaggio in tante linee. Invieremo quindi al server ognuna di queste linee singolarmente. Indichiamo prima con NumeroLinee le linee totali e con Linea una singola linea:
adesso dividiamo il messaggio in tante linee:
e finalmente inviamo ogni singola linea di testo al server:
ed infine inviamo il segno punto " . " per indicare al server che l'invio del testo è terminato:
Ecco adesso l'ultimo passaggio con cui si chiude il procedimento di invio dei dati. Se il testo è stato inviato quindi m_State è MAIL_CORPO, lo stato passa a MAIL_FINE:
essendo terminato il procedimento chiudiamo la comunicazione col server:
e terminiamo i casi appena visti:
ritornando a quei tre famosi numeri, se il codice di risposta è diverso dai già citati 250, 220 e 354, chiudiamo la connessione col server, visto che questo non è disponibile a ricevere le nostre richieste e visualizziamo un messaggio di errore col codice relativo:
e per finire chiudiamo la condizione If introdotta all'inizio (il caso in cui il codice di risposta coincidesse con 250,220 o 354) e terminiamo la sottoprocedura:
Nel caso in cui si voglia gestire in modo preciso l'errore bisognerà aggiungere al codice la seguente sottoprocedura:
|
Archivio:ndexed | ||||
Lezioni | Commenta questa lezione | Invia la tua guida | Avviso per le nuove lezioni | Proponi un argomento |
Visual Basic Italia© copyright 2000 - tutti i diritti riservati |