Visual Basic Simple
Invio di un'email tramite un programma esterno
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Ricerca personalizzata

Difficoltà: 2 / 5

Al giorno d'oggi quasi tutti hanno una casella di posta elettronica personale. È quindi normale inserire in un programma un collegamento al cui click viene aperto il programma client di posta elettronica predefinito per permettere l'invio di un'e-mail.

Prima di vedere le poche righe di codice di cui si compone questo HowTo, preparemo un piccolo form in cui l'utente potrà specificare i dati dell'e-mail da inviare.

Figura 1Inseriamo sopra un form:

  • Una Labeldi nome EmailVBSimple con la proprietà Caption impostata a: "Clicca qui per inviare un'email a VB Simple" e scegliamo per essa un font sottolineato ed il colore blu, classico dei collegamenti internet;
  • Una Labeldi nome EmailToLabel con la proprietà Caption impostata a: "Invia un'email a:";
  • Una TextBoxdi nome EmailTo posizionata a fianco della label EmailToLabel.
  • Una Labeldi nome EmailCCLabel con la proprietà Caption impostata a: "e in copia carbone a:";
  • Una TextBoxdi nome EmailCC a destra della Label EmailCCLabel;
  • Una Labeldi nome EmailCCNLabel con la proprietà Caption impostata a: "e in copia nascosta a:";
  • Una TextBoxdi nome EmailCCN a destra della Label EmailCCNLabel;
  • Una Labeldi nome EmailOggettoLabel con la Caption impostata a: "Oggetto";
  • Una TextBoxdi nome EmailOggetto subito a destra della Label precedente;
  • Una Labeldi nome EmailCorpoLabel con la Caption "Corpo della lettera:";
  • Una TextBoxdi nome EmailCorpo con la proprietà Multiline impostata a True;
  • Un CommandButton di nome EmailInvia, con la Caption impostata a "Invia E-mail"

Al momento del click sulla Label EmailVBSimple vengono automaticamente riempiti i vari campi del programma.

Utilizzeremo la funzione API ShellExecute per richiamare il comando in stile Internet per inviare un'email. Il comando in questione è "mailto:" seguito dall'indirizzo di posta elettronica e seguito da una serie di comandi opzionali.

Il codice di questo semplice progetto è il seguente:

  1. Option Explicit
  2. Private Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Alla riga 2 abbiamo dichiarato la funzione API ShellExecute sopra citata.
Essa richiede specificato l'handle di una finestra resposabile della chiamata., una stringa per specificare il comando da eseguire (lpOperation), il nome del file da eseguire (lpFile), una serie di parametri (lpParameters), la directory di lavoro (lpDirectory) ed infine lo stile della finestra da aprire (nShowComd).

Seguono due semplicissime routine legate all'evento click sopra la Label EmailVBSimple e quella legata al click sopra il pulsante PulsanteInvia.

  1. Private Sub EmailVBSimple_Click()
  2.     EmailTo.Text = "vbsimple@email.it"
  3.     EmailCC.Text = "fibiafbi@hotmail.com"
  4.     EmailOggetto.Text = "Prova di e-mail esterna"
  5.     EmailCorpo.Text = "Corpo della lettera da inviare"
  6. End Sub

Il click sopra la Label EmailVBSimple riempirà i campi del programma con i dati d'esempio di VB Simple.

  1. Private Sub PulsanteInvia_Click()
  2.     Dim COMANDO As String
  3.     COMANDO = "mailto:" & EmailTo.Text
  4.     COMANDO = COMANDO & "?cc=" & EmailCC.Text
  5.     COMANDO = COMANDO & "&ccn=" & EmailCCN.Text
  6.     COMANDO = COMANDO & "&subject=" & EmailOggetto.Text
  7.     COMANDO = COMANDO & "&body=" & EmailCorpo.Text
  8.     ShellExecute Me.hwnd, "open", COMANDO, ByVal 0&, ByVal 0&, ByVal 0&
  9. End Sub

La routine vera e propria di questo progetto è la PulsanteInvia_Click.
All'interno di essa viene dichiarata la variabile COMANDO per comporre la stringa Internet per l'invio di un'email.

Vengono quindi, man mano, aggiunti alla stringa COMANDO i singoli campi del progetto alla stringa da eseguire.
La stringa si compone di: "mailto:" seguito dall'indirizzo del destinatario (riga 13).
È inoltre possibile aggiungere una serie di argomenti opzionali. Come per tutti gli argomenti inseriti negli indirizzi internet, il primo deve essere preceduto da un punto interrogativo (?) e gli altri argomenti devono essere separati tra loro da un ampersand (&).
Abbiamo così inserito l'argomento "cc=" seguito da un indirizzo di posta per identificare il destinatario in copia carbone della lettera (riga 14). Abbiamo anche specificato i destinatari in copia carbone nascosta mediante la specificazione dell'argomento "ccn=" seguito dall'indirizzo email (riga 15).
Altri argomenti che è possibile specificare sono l'oggetto della email, identificato dall'argomento "subject=" (riga 16) e il corpo stesso della lettera, identificato da "body=".

Una volta creato l'indirizzo internet per scrivere un'email, richiamiamo il client di posta predefinito tramite la funzione ShellExecute passandogli come stringa dell'operazione da eseguire il comando "open" e come nome del file l'indirizzo appena creato e memorizzato nella variabile COMANDO. Tutti gli altri argomenti della funzione ShellExecute li abbiamo voluti lasciare in bianco perché inutili ai nostri scopi. Essendo argomenti obbligatori è stato necessario impostarli a valori nulli tramite ByVal 0&.

Naturalmente, nel nostro esempio abbiamo voluto inserire un po' di tutto per creare un'email, compreso il testo del messaggio. In altri casi basterà creare una stringa di comandi minima, senza la necessità di presentare all'utente form di compilazione o altro. La chiamata stessa, infatti, aprirà il client di posta predefinito e tramite quello l'utente potrà compilare ed inviare l'email.

Figura 2
Figura 2

Il progetto è semplicissimo da usare, basta riempire i vari campi e cliccare il pulsante "Invia E-mail" per richiamare il programma client di posta predefinito e inviare la lettera.

Questa pratica è usatissima in tantissimi programmi e non comporta rischi particolari.
Come già detto, abbiamo voluto esagerare in questo esempio, per spiegare le possibilità messe a disposizione dalla composizione di un indirizzo internet di tipo "mailto:"; in altre situazioni, il click sopra la label, da solo basterebbe a creare la stringa da eseguire, senza l'aiuto di campi da riempire.

Un esempio di quest'applicazione si trova nella richiesta sullo sviluppo di un controllo utente per collegamenti internet.

Abbiamo già ricevuto decine di e-mail in cui si chiedeva come poter allegare uno o più files ad un messaggio preparato con questa soluzione. Al giorno d'oggi il protocollo mailto: non consente questa operazione e la soluzione al problema necessita un approccio del tutto differente, molto più complesso e che richiede una connessione diretta al server SMTP. Si prega quindi di astenersi dall'inviare altre richieste circa quest'argomento.

Fibia FBI
16 Gennaio 2001
Nota del 28 Novembre 2002

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice degli HowTo