Esportare la posta elettronica da Outlook ad Access

Esportare la posta elettronica da Outlook ad Access.
In molti contesti lavorativi può risultare necessario esportare le e-mail gestite con Microsoft
Outlook all'interno di un database Access.
La procedura passo-passo integrata nel client di posta Outlook è semplice ed efficace ma ha un
grosso limite: non è possibile aggiungere dati ad un database creato in precedenza.
Se si desidera esportare frequentemente i dati nel medesimo database, è possibile applicare una
soluzione basata sull'uso di codice VBA (Visual Basic for Applications).
Per esportare l'archivio di posta usando la procedura offerta da Outlook, è sufficiente fare
riferimento all'apposito "wizard", accessibile facendo riferimento alla funzione Importa/Esporta del
menù File.
Si dovrà semplicemente scegliere l'esportazione dei dati in formato Access, selezionare la cartella
desiderata e premere il pulsante "Avanti".
Utilizzando del codice VBA, l'utente ha la possibilità di automatizzare l'intera procedura di
esportazione da Outlook verso una base dati Access. Premendo la combinazione di tasti ALT più
F11 da Microsoft Outlook si avrà accesso all'Editor Visual Basic (VBE).
Dal menù Inserisci, va selezionata la voce "Modulo" quindi si può procedere all'inserimento del
seguente codice:
Sub EsportaPosta()
Dim ns As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Set ns= GetNamespace("MAPI")
Set objFolder= ns.PickFolder
Dim adoConn As ADODB.Connection
Dim adoRS As ADODB.Recordset
Dim intCounter As Integer
Set adoConn= CreateObject("ADODB.Connection")
Set adoRS= CreateObject("ADODB.Recordset")
adoConn.Open "DSN=DatiOutlook;"
adoRS.Open "SELECT * FROM email", adoConn, adOpenDynamic, adLockOptimistic
For intCounter= objFolder.Items.Count To 1 Step -1
With objFolder.Items(intCounter)
if .Class= olMail Then
adoRS.AddNew adoRS("Subject")= .Subject
adoRS("Body")= .Body
adoRS("FromName")= .SenderName
adoRS("ToName")= .To
adoRS("FromAddress")= .SenderEmailAddress
adoRS("FromType")= .SenderEmailType
adoRS("CCName")= .CC
adoRS("BCCName")= .BCC
adoRS("Importance")= .Importance
adoRS("Sensitivity")= .Sensitivity
adoRS.Update
End If
End With
Next
adoRS.Close
Set adoRS= Nothing
Set adoConn= Nothing
Set ns= Nothing
Set objFolder= Nothing
End Sub
Prima di eseguire la macro appena creata, è indispensabile in questo caso creare il database Access
sul quale si andrà a memorizzare i dati esportati da Outlook.
E' possibile, a tal proposito, servirsi di quello che può essere creato sfruttando la procedura passopasso integrata in Outlook. Si può comunque impiegare, come base dati per la memorizzazione
delle e-mail esportate da Outlook, anche un database già esistente: è sufficiente creare una tabella
denominata "email" con i vari campi richiesti (Subject, Body, FromName, ToName, FromAddress).
Tutti i campi sono di tipo testo tranne "Body" che deve essere necessariamente impostato come
campo "memo". I nomi dei campi ricalcano quelli impiegati dal wizard di Outlook, purtuttavia
possono essere liberamente modificati.
Il codice utilizza una connessione DSN (driver ODBC) per "dialogare" con la base dati Access. E'
comunque possibile utilizzare altre stringhe di connessione.
Se si usa una connessione DSN, è necessario accedere alla finestra "Strumenti di amministrazione"
di Windows, quindi, fare doppio clic sull'icona "Origine dati (ODBC)".
Nella finestra "DNS utente" è necessario selezionare "MS Access Database", quindi, cliccare su
"Aggiungi".
Nella schermata successiva, va scelto "Microsoft Access Driver (*.mdb)", quindi, cliccare sul
pulsante "Fine".
Nella finestra "Configurazione ODBC per Microsoft Access", attribuire al DSN il nome
"DatiOutlook". Cliccando il pulsante "Seleziona", si dovrà indicare il database Access da utilizzare.
Dopo aver creato il DSN, si potrà eseguire la macro da Outlook accedendo al menù Strumenti,
Macro.
A questo punto, si deve selezionare la macro "EsportaPosta" e premere il pulsante Esegui.
Info prelevate da: http://www.ilsoftware.it/articoli.asp?ID=3818
Numero esempio : 331
Titolo : Leggere_oggetti_mail_Microsoft_Outlook
Autore : jb
Commento : Una macro per leggere su delle msgbox, tutti gli oggetti delle email ricevute in
Microsoft Outlook.
Sub leggere_messaggi()
Dim olapp As Outlook.Application 'Pensare a Strumenti/Riferimenti Microsoft Outlook Library
(nel VBE)
Dim olns As Outlook.Namespace
Dim olmf As Outlook.MAPIFolder
Dim obj As Object
Set olapp = New Outlook.Application
Set olns = olapp.GetNamespace("mapi")
Set olmf = olns.GetDefaultFolder(olFolderInbox)
For Each obj In olmf.Items
MsgBox obj.Subject
Next
End Sub
notaio informatico Riccardo Ricciardi
Outlook comunica con Word e Access tramite VBA (Visual Basic for Application) ed è quindi
possibile con un semplice click su un pulsante eseguire le seguenti macro da me appositamente
scritte;
Archivia Mail in Access
Può essere utile archiviare in un database di Access in C.\ Posta.mdb alcune voci (data di
ricezione - mittente - oggetto - testo della mail) di una o più mail selezionate in Outlook
Leggi Mail in Word
In Word per leggere comodamente un testo conviene attivare dal Menù Visualizza il Layout
"Lettura", che visualizza il file come in un leggio.
Tale funzionalità in Outlook non esiste, pur attivando come Editor di posta lo stesso Word.
Per leggere con Layout "lettura" una mail molto lunga e magari scritta con caratteri piccoli,
bisognerebbe selezionare tutto il testo, copiarlo, aprire Word, incollarvi il testo copiato e
visualizzarlo con tale Layout.
La macro "LeggiInWord", previa selezione di una qualunque mail, senza aprirla, copia il testo
(body), apre un file di Word vuoto, vi incolla il testo copiato, ingrandisce i caratteri (Font.size =16)
e visualizza il file di Word con Layout Lettura.
Ascolta Mail
Per ascoltare automaticamente (per 30 secondi: la PauseTime può essere variata nel codice di cui
appresso) in Outlook una mail appena ricevuta nella cartella "Posta in arrivo" o una mail
selezionata in una qualunque cartella ho creato due apposite macro che sfruttano le funzionalità di
"sintesi vocale" di Windows XP aggiornate con il programma "RSSolo4ItalianSilvia.exe"
scaricabile da questa pagina:
http://www.notaioricciardi.it/programmi%20eseguibili.htm
Librerie necessarie:
Procedura: ALT F11 - Strumenti - Riferimenti: selezionare e salvare con OK: Microsoft Word
esistente nel computer (Word 11 è quella di Word 2003) per leggere la mail in Word, Microsoft
DAO 3.6 Obiect Library per comunicare con un database di Access e Microsoft Speech Obiect
Library per la sintesi vocale (dopo aver installato la voce italiana di Silvia con
"RSSolo4ItalianSilvia.exe" di cui sopra.
Il download: ArchiviaLeggiAscoltaMail.zip contiene il database Posta.mdb da copiare in C:\
nonché i file "Modulo1.bas" e "Modulo2.bas" contenenti le macro e il form
"frmSintesiVocale.frm", da installare in Outlook con la seguente procedura:
1) aprire in Outlook con ALT + F11 l'editor VBA e selezionare con click destro il Progetto1
(VBAProject.OTM) in modo che appaia in Menù: Importa file che consente l'importazione di
Modulo1.bas; ma bisogna importare, con la stessa procedura anche il Modulo2.bas (che contiene
delle variabili globali) e il form "frmSintesiVocale", previa individuazione della cartella dove è
stato dezippato il file;
2) fare doppio click su Modulo1 (che compare dopo l'avvenuta importazione) in modo che aperto il
codice della Macro si possa biffare (facendo scorrere la barra verticale fino ad individuarla) dal
Menu Strumenti - Riferimenti le librerie Microsoft Word esistente nel computer (Word 11 è
quella di Word 2003) e Microsoft DAO 3.6 Obiect Library (o equivalenti) per comunicare con un
database di Access.
3) la macro di lettura della mail in arrivo viene lanciata, previa esecuzione della routine di
inizializzazione Sub AvviaAscoltoUltimaMail() appena Outlook riceve una nuova mail e quindi
perché funzioni bisogna copiare il seguente codice nel modulo già esistente, dopo averlo aperto
con doppio click, "ThisOutookSession" della cartella "Microsoft Office Outook Oggetti" di
Progetto1 (VBAProject.OTM) di VBA (apribile con ALT F11); per disattivare l'ascolto di nuove
mail in ricezione bisognerà eseguire la routine Sub ChiudiAscolto()
Il codice da copiare (Copia-Incolla), per intero, è il seguente in verde:
Public WithEvents outApp As Outlook.Application
Sub AvviaAscoltoUltimaMail()
Set outApp = Application
End Sub
Sub ChiudiAscolto()
Set outApp = Nothing
End Sub
Private Sub outApp_NewMail()
' leggi mail appena arriva
Dim myOlExp As Outlook.Explorer
Dim myOlSel As Outlook.Selection
Dim x As Integer
Set myOlExp = outApp.ActiveExplorer
Set myNamespace = outApp.GetNamespace("MAPI")
Set myFolder = outApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set myItems = myFolder.Items()
Glo_Messaggio = 0
For Each myItem In myItems
Glo_Messaggio = Glo_Messaggio + 1
Next
Set myItem = myFolder.Items(Glo_Messaggio)
Glo_Testo = "Mail avente per oggetto: " & myItem.Subject & "inviata da: " &
myItem.SenderName & ", il cui testo è: " & myItem.Body
Glo_Testo = CleanMail(strDirty:=Glo_Testo)
Dim Voice As SpVoice
Set Voice = New SpVoice
Voice.Speak Glo_Testo, SVSFlagsAsync
PauseTime = 30
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
Finish = Timer
Set myOlExp = Nothing
End Sub
Tutte le macro potranno essere eseguite dal Menù: Strumenti - Macro - Macro: Esegui Macro, ma
conviene creare un Nuovo Menu con questa procedura:
Dal Menu di Outlook Strumenti - Personalizza - Comandi selezionare l'ultima voce Nuovo menu e
trascinarlo, tenendo premuto il tasto sinistro del Mouse, nella barra degli strumenti Standard,
In questo Menu si potranno aggiungere i pulsanti relativi alle cinque macro che si potranno
eseguire:
1) ArchiviaMail per archiviare nel database C:\Posta.mdb le mail selezionate
2) LeggiInWord per leggere una qualunque mail selezionata in Word con Layout lettura
3) MailSelezionata per ascoltare dalla voce di "Silvia" una qualunque mail selezionata, previa
apertura del form "SintesiVocale"
4) ThisOutlookSession.AvviaAscoltoUltimaMail, per inizializzare, dopo aver aperto Outlook e
quando si vuole, la macro automatica di ascolto in ricezione di una mail in Posta in arrivo
5) ThisOutlookSession.ChiudiAscolto, per disattivare la macro di cui sopra senza dover chiudere e
riaprire Outlook.
Selezionando i pulsanti appena creati potranno essere abbreviati i nomi (click destro) e cambiate le
icone.
San google mi ha regalato un esempio di come creare una macro per salvare gli allegati e con 2
colpi di editor ecco qui come salvare il testo:
Sub SaveBody()
'Declaration
Dim myItems, myItem As Object
Dim myOrt As String
Dim myOlApp As New Outlook.Application
Dim myOlExp As Outlook.Explorer
Dim myOlSel As Outlook.Selection
myOrt = "C:\salva-mail"
On Error Resume Next
'work on selected items
Set myOlExp = myOlApp.ActiveExplorer
Set myOlSel = myOlExp.Selection
'for all items do...
For Each myItem In myOlSel
myItem.SaveAs myOrt & "petizio.txt", olTXT
Next
'free variables
Set myItems = Nothing
Set myItem = Nothing
Set myOlApp = Nothing
Set myOlExp = Nothing
Set myOlSel = Nothing
End Sub
Per utilizzare le opzioni della riga di comando, attenersi alla seguente procedura:
1. Fare clic sul pulsante Start, scegliere Cerca, quindi Tutti i file e le cartelle.
In Windows 2000 e in Windows Millennium (ME) fare clic sul pulsante Start, scegliere Trova, quindi File o cartelle.
2. Digitare Outlook.exe nella casella Nome del file o parte del nome, quindi scegliere Cerca.
In Windows 2000 e in Windows ME digitare Outlook.exe nella casella Nome, quindi scegliere Cerca ora.
3. Prendere nota del percorso del file eseguibile di Outlook visibile in corrispondenza di Nella cartella. Il file potrebbe, ad esempio, trovarsi
nel percorso:
C:\Programmi\Microsoft Office\Office\Outlook.exe
4. Scegliere Chiudi dal menu File.
5. Fare clic sul pulsante Start, quindi scegliere Esegui.
6. Digitare il percorso completo annotato al punto 3, compreso il nome del file, premere la BARRA SPAZIATRICE e digitare una barra ("/")
seguita dall'opzione.
Per utilizzare ad esempio l'opzione CleanReminders, il testo della riga di comando contenuta nella casella Apri deve essere:
"c:\Programmi\Microsoft Office\Office\Outlook.exe" /cleanreminders
NOTA: il vantaggio di questo metodo consiste nel fatto che non è necessario tornare indietro per togliere l'opzione della riga di comando dal
percorso del collegamento. Inoltre il percorso completo deve essere racchiuso tra virgolette allo scopo di conservare nomi di file lunghi.
Opzione riga comando
-------------------
Finalità
-------
/CleanFreeBusy
Consente di eliminare e di rigenerare le informazioni sulla disponibilità.
/Cleanfinders
Consente di rimuovere ricerche salvate dall'archivio di
Exchange Server.
/CleanReminders
Consente di eliminare e di rigenerare i promemoria.
/CleanViews
Consente di ripristinare le visualizzazioni predefinite.
/CheckClient
Consente di richiedere il gestore predefinito di posta elettronica,
news e contatti.
/Recycle
Consente l'avvio di Outlook in una finestra di Outlook
già definita, se esistente.
/ResetFolders
Consente di ripristinare cartelle mancanti per la
destinazione predefinita.
/ResetOutlookBar
Consente di ricreare la barra di Outlook.
/Nopreview
Consente di disattivare il riquadro di anteprima e di rimuovere
l'opzione dal menu Visualizza.
/CleanSchedPlus
Consente di eliminare tutti i dati di Schedule+ (liberi/occupati,
autorizzazioni e file CAL) dal server
e permette ai dati liberi/occupati contenuti nel
calendario di Outlook di essere utilizzati e
visualizzati da tutti gli utenti di Schedule+ 1.0.
/Safe
Consente l'avvio di Outlook senza estensioni, riquadro di
anteprima e barre degli strumenti personalizzate.