Scegliere il mittente di un’email inviata con VBA

di Alessandra Salvaggio

Pubblicato 18 Marzo 2010
Aggiornato 12 Febbraio 2018 20:41

Una novità interessante introdotta con il VBA di Office 2007, e mantenuta in Office 2010, è la possibilità di inviare email attraverso VBA utilizzando Outlook e specificando l’account da cui si vuole inviare la email.

Anche con Office 2003 si potevano inviare email comandando Outlook tramite VBA, ma senza specificare l’account dal quale le email dovevano partire. L’email veniva inviata sempre e comunque dall’account principale. Ora, grazie alla introduzione della proprietà SendUsingAccount dell’oggetto email le cose sono cambiate.

Prima di proporre il codice che esegue questa operazione, ricordiamo che si possono inviare email tramite Outlook da tutte le applicazioni Office, non solo da Outlook stesso. Basta aggiungere, nell’editor di VBA del file da cui si vuole inviare l’email la libreria Microsoft Outlook. Per aggiungere la libreria, nell’editor di VBA, basta scegliere Strumenti > Riferimenti e selezionare la libreria necessaria dalla finestra che si presenta.

Una volta individuato l’evento che avvierà l’invio dell’email, basta completare come segue la routine che gestisce questo evento (noi immaginiamo di rispondere all’evento click su un pulsante).

Private Sub InviaMail_Click()
Dim bStarted As Boolean
Dim oOutlookApp As Outlook.Application
Dim oItem As Outlook.MailItem
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
'Crea un nuovo oggetto email
Set oItem = oOutlookApp.CreateItem(olMailItem)
With oItem
'Imposta il destinatario
.To = "nome@server.it"
'Imposta il destinatario in copia
'.CC = "nome@server.it"
'Definisce l'oggetto della email
.Subject = "E-mail da VBA"
'Definisce il contenuto della email
.Body = "Ciao da VBA"
' Definisce l'accont da usare per l'invio
.SendUsingAccount = oOutlookApp.Session.Accounts.Item(2)
'invia effettivamente l'email
.Send
End With
If bStarted Then
'Chiude Outlook se è stato aperto via codice
oOutlookApp.Quit
End If
'Pulizia
Set oItem = Nothing
Set oOutlookApp = Nothing
End Sub

Si noti che che l’account da usare va indicato con un numero. A questo proposito bisogna sapere che gli account sono numerati nell’ordine in cui compaiono nella finestra degli account di Outlook. La numerazione parte da 1 che è l’account predefinito.