Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Gestire account mail con access

89 views
Skip to first unread message

Marco67

unread,
Jan 13, 2015, 3:54:58 AM1/13/15
to
Salve a tutti, ho trovato su post precedent i metodi per l'invio di messaggi
di posta tramite VBA.
Ho pero' l'esigenza di scaricare tramite VBA i messaggi di posta per
archiviarli nella mia tabella...
Sapreste darmi qualche suggerimento in tal senso?

Grazie a tutti in anticipo.
Marco67



radica...@gmail.com

unread,
Jan 14, 2015, 5:42:13 AM1/14/15
to
Il giorno martedì 13 gennaio 2015 09:54:58 UTC+1, Marco67 ha scritto:
> Salve a tutti, ho trovato su post precedent i metodi per l'invio
> di messaggi di posta tramite VBA.
> Ho pero' l'esigenza di scaricare tramite VBA i messaggi di posta
> per archiviarli nella mia tabella...
> Sapreste darmi qualche suggerimento in tal senso?

Si, come no. Ho scritto questa routine per lavoro e funziona che
e' una bellezza, pero' la devi adattare :
Public Sub Legge_Mails()

On Error GoTo ERRORE

Dim OTLK As Outlook.Application
Dim Mail As Outlook.MailItem
Dim Session As Outlook.Namespace
Dim Folder As Outlook.MAPIFolder
Dim Max_Mails As Long
Dim Allegati As New ADODB.Recordset
Dim POSTA As New ADODB.Recordset
Dim Mittente As String
Dim Oggetto As String
Dim Anomalie As String
Dim M As Long
Dim A As Long
Dim Allegato As String
Dim N_Allegati As Long
Dim S As Form
' ------------- routine -----------------------------------------------------------------------------------

Set OTLK = GetObject(, "outlook.application")
Set Session = OTLK.Session
Set Folder = Session.GetDefaultFolder(olFolderInbox)
Set S = G_Sys_Stato.Sentinella

If Folder.Items.Count = 0 Then Set Folder = Nothing: Set Session = Nothing: Exit Sub

Max_Mails = 10

POSTA.LockType = adLockOptimistic: POSTA.CursorType = adOpenStatic: POSTA.CursorLocation = adUseClient
Allegati.LockType = adLockOptimistic: Allegati.CursorLocation = adUseClient: Allegati.CursorType = adOpenStatic

POSTA.Open "select * from posta_in where 1=0;", G_Sys_Stato.CN_LS
Allegati.Open "select * from allegati_in where 1=0;", G_Sys_Stato.CN_LS

If Max_Mails > Folder.Items.Count Then Max_Mails = Folder.Items.Count

For M = Max_Mails To 1 Step -1

Set Mail = Folder.Items(M)

' controllo già letta
If Not Mail.UnRead Then GoTo Skip_Mail

Mail.UnRead = False
'controllo esistenza indirizzo
Mittente = Trim(Mail.SenderEmailAddress)
G_Indirizzi.MoveFirst
G_Indirizzi.Find "indirizzo_='" & Mittente & "'"
If G_Indirizzi.EOF Then GoTo Skip_Mail

' controllo indirizzo esterno : in questo caso nel corpo deve essere presente la password
' e deve essere inserita ALL' INIZIO del corpo della mail

If Not IsNull(G_Indirizzi.Fields("esterno_").Value) Then
If G_Indirizzi.Fields("esterno_").Value Then
If Not (InStr(Mail.Body, G_Password) = 1) Then Anomalie = "indirizzo esterno ma password mancante.;"
End If
End If

'controllo esistenza funzione
Oggetto = Trim(Replace(Mail.Subject, " ", ""))
G_Funzioni.MoveFirst
G_Funzioni.Find "funzione_='" & Oggetto & "'"

If (G_Funzioni.EOF) Then Anomalie = Anomalie & "funzione non esistente.;"

' controllo funzione benformata
Anomalie = Anomalie & Richiesta_Ben_Formata(Mail.Subject, Mail.Body)

'controllo abilitazione indirizzo -> funzione
G_Indirizzi_Funzioni.MoveFirst
G_Indirizzi_Funzioni.Find "indirizzo_='" & Mittente & "'"
If G_Indirizzi_Funzioni.EOF Then
Anomalie = Anomalie & "indirizzo non esistente nelle abilitazioni.;"
Else
If IsNull(G_Indirizzi_Funzioni.Fields("abilitato_").Value) Then
Anomalie = Anomalie & "indirizzo esistente nelle abilitazioni ma non abilitato alla funzione.;"
Else
If Not (G_Indirizzi_Funzioni.Fields("abilitato_").Value) Then
Anomalie = Anomalie & "indirizzo esistente nelle abilitazioni ma non abilitato alla funzione.;"
End If
End If
End If

K = "{" & Kiave() & "}"

POSTA.AddNew

POSTA.Fields("kiave_").Value = K
POSTA.Fields("numero_allegati_").Value = Mail.Attachments.Count
POSTA.Fields("cc_nascosti_").Value = Mail.Bcc
POSTA.Fields("corpo_").Value = Mail.Body
POSTA.Fields("cc_").Value = Mail.CC
POSTA.Fields("id_").Value = Mail.EntryID
POSTA.Fields("oggetto_").Value = Oggetto
POSTA.Fields("mittente_").Value = Mittente
POSTA.Fields("dt_ricezione_").Value = Mail.ReceivedTime
POSTA.Fields("elaborata_").Value = False
POSTA.Fields("Anomalie_").Value = Anomalie
POSTA.Update
DoEvents

' registra e salva tutti gli allegati (solo se non sono state riscontrate anomalie)

N_Allegati = Mail.Attachments.Count

If (N_Allegati > 0) And (Anomalie = "") Then
KK = K
For A = 1 To N_Allegati
Allegato = G_ALLEGATI_IN & KK & Mail.Attachments.Item(i).FileName
Allegati.AddNew
Allegati("Kiave_").Value = KK: Allegati("Kiave_Posta_").Value = K: Allegati("Nome_").Value = Allegato
Allegati.Update
Mail.Attachments.Item(i).SaveAsFile Allegato
DoEvents
KK = "{" & Kiave() & "}"
Next A
End If
Skip_Mail:
Anomalie = ""
Next M

Allegati.Close: Set Allegati = Nothing: POSTA.Close: Set POSTA = Nothing: DoEvents
Exit Sub
ERRORE:
Select Case Err.Number
Case 429 ' outlook chiuso
S.Sentinella.stato_outlook_.Value = "Chiuso": S.Refresh: DoEvents: Exit Sub
Case Else
GoTo Skip_Mail
End Select

End Sub

Bruno Campanini

unread,
Jan 14, 2015, 1:47:51 PM1/14/15
to
Marco67 was thinking very hard :
> Salve a tutti, ho trovato su post precedent i metodi per l'invio di messaggi
> di posta tramite VBA.
> Ho pero' l'esigenza di scaricare tramite VBA i messaggi di posta per
> archiviarli nella mia tabella...
> Sapreste darmi qualche suggerimento in tal senso?

Ho una procedura VBA (Office 2013) che, definito quanto segue:

OutlookAccount = "xxxxx...@gmail.com"
Data_Ini = #12/1/2014# ' mm/dd/yyyy
Data_Fin = Date ' mm/dd/yyyy
SaveIn = "D:\Outlook_Attachments\"
MailTable = "t_Outlook_MailReceived"
AttachmentTable = "t_Outlook_Attachments"

con riferimento al periodo Data_Ini - Data_Fin:
1 - salva i campi di Outlook relativi alla posta nella
tabella MailTable assegnando un IdMail AutoNumber
2 - salva nella tabella collegata AttachmentTable
il nome del file "attaccato"
3 - salva nella directory SaveIn detto file col
suo nome preceduto dall'IdMail che deriva
da MainTable

Se t'interessa batti un colpo.
Bruno

Marco67

unread,
Jan 15, 2015, 6:45:02 AM1/15/15
to

<radica...@gmail.com> ha scritto nel messaggio
news:86241375-0eae-4998...@googlegroups.com...
***
Ti ringrazio molto, mi sono dimenticato di scrivere stavo cercando qualcosa
che mi permettesse di lavorare indipendentemente da un client di posta
(Outlook o altro...)
e' comunque sicuramente un bel progetto, vedo di implementarlo nel mio
sistema: in ogni caso fara' il lavoro che mi serve.

Grazie ancora



Marco67

unread,
Jan 15, 2015, 6:50:37 AM1/15/15
to

"Bruno Campanini" <brun...@libero.it> ha scritto nel messaggio
news:m96dkh$6ro$1...@speranza.aioe.org...
Si Bruno, grazie 1000, certo che mi interessa, anche se mi sono dimenticato
di scrivere che stavo cercando qualcosa che mi permettesse di lavorare
indipendentemente da un client di posta (Outlook o altro...)
Se pero' Outlook e' l'unica soluzione percorribile o meglio 'consigliata',
ti chiedo di fornirmi ulteriori dettagli, mi farebbe piacere.

Grazie ancora


Bruno Campanini

unread,
Jan 15, 2015, 8:06:37 AM1/15/15
to
Marco67 formulated on Thursday :
I dettagli te li ho già forniti...
Se intendi il codice, si tratta di un foglio A4 (50-60 righe);
però dovrei anche definirti campi e relazioni delle due tabelle
che accolgono Received Mail + Attachments.
Sto anche facendo alcune modifiche per comprendere tutti gli
account aperti in Outlook e includervi Sent Mail + Attachments.

In un paio di giorni dovrei aver finito (ci lavoro di notte
perché il giorno... dormo).
Se vuoi posso inviarti il file (Access 2013) a lavoro ultimato.

Bruno

Marco_280167

unread,
Jan 16, 2015, 8:48:55 AM1/16/15
to

"Bruno Campanini" <brun...@libero.it> ha scritto nel messaggio
news:m98e0o$h8n$1...@speranza.aioe.org...
Beh, Bruno... non so che dire: grazie infinite!


Bruno Campanini

unread,
Jan 17, 2015, 12:20:43 PM1/17/15
to
Marco_280167 used his keyboard to write :

> Beh, Bruno... non so che dire: grazie infinite!

https://www.dropbox.com/s/ym5vm60wmonjf3r/OutlookBackups.accdb?dl=0

Dovrai sostituire alcuni dati dei tuoi account nel codice
del pulsante "Backup Sent Mail...".
Se necessario, ma non credo, anche nel codice di "Backup
Received Mail..."

Waiting for bugs report.

Bruno

Marco67

unread,
Jan 20, 2015, 2:27:42 AM1/20/15
to

"Bruno Campanini" <brun...@libero.it> ha scritto nel messaggio
news:m9e5l5$crn$1...@speranza.aioe.org...
Grazie 1000 Bruno, l'ho scaricato e tra oggi e domani lo provo, cosi' ti
aggiorno.
A presto e ancora Grazie
Marco67


radica...@gmail.com

unread,
Jan 20, 2015, 4:20:52 AM1/20/15
to
Il giorno giovedì 15 gennaio 2015 12:45:02 UTC+1, Marco67 ha scritto:

> Ti ringrazio molto, mi sono dimenticato di scrivere stavo cercando
> qualcosa che mi permettesse di lavorare indipendentemente da un
> client di posta (Outlook o altro...)

Scusa solo ora mi sono accorto di questa tua.

Si puo' fare, ma non ti da tutte le commodities di Outlook ma forse
a te non servono.

Vedi qua, e' spiegato bene :
http://www.rondebruin.nl/win/s1/cdo.htm

Lascia perdere che il sistema lavora dentro excel, e' indifferente
perche' quello e' vba che usa librerie CDO quindi quelle linee di
codice che vedi le puoi trasportare tranquillamente in un progetto
Access.

Cmq ho visto che Bruno ormai deve aver soddisfatto la tua richiesta
in modo eccellente e completo (come fa sempre lui).

In ogni caso guarda il link, potrebbe comunque servirti non si sa
mai.

Ciao

Marco67

unread,
Jan 21, 2015, 4:09:57 AM1/21/15
to

"Bruno Campanini" <brun...@libero.it> ha scritto nel messaggio
news:m9e5l5$crn$1...@speranza.aioe.org...
Ecomi Bruno, allora ho provato a lavorarci.
Ho impostato un nuovo (ed uno solo) account di posta su Outlook (io uso
O.2007 ed ho chiaramente referenziato la libr. Office Outllok 12 anziche' la
15 com'era nel tuo progetto).

Proprio come mi hai segnalati nel codice, sia per l'acquisizione della posta
in entrata che in uscita, ricevo il messaggio di errore: 'Impossibile
trovare un oggetto' su questa istruzione:
Set arrMail(2, k) = Session.Folders(CStr(i)).Folders("Inbox")

Considera che la variabile 'i' dell'insieme OlAccounts corrisponde
perfettamente all'account di posta memorizzato

In un primo momento ho pensato che il problema fosse la reale posizione
delle rispettive cartelle all'interno dell'account.

Entrando direttamente in outlook ho trovato che la posizione e': Cartelle
Personali\Posta in arrivo
Quindi ho provato in vari modi a ridefinire il percorso, ma senza risultato,
come a dd esempio:
Set arrMail(2, k) = Session.Folders(CStr(i)).Folders("Cartelle
Personali\Posta in arrivo")

.
A questo punto, non vorrei il problema riguardasse l'istruzione A2013, non
riconoscita su A2007 ???

Che ne pensi??



Bruno Campanini

unread,
Jan 21, 2015, 7:32:31 AM1/21/15
to
Marco67 explained on 21-01-15 :
Prova così:
Set arrMail(2, k) = Session.Folders(CStr(i)).Folders("Cartelle
Personali").Folders("Posta in arrivo")

.Folders("...") si riferisce a una Dir specifica,
non a un path più o meno completo.

Bruno

Marco_280167

unread,
Jan 23, 2015, 9:37:22 AM1/23/15
to

<radica...@gmail.com> ha scritto nel messaggio
news:c8763ae2-79e0-4955...@googlegroups.com...
Grazie 1000 davvero, in effetti avevo trovato qualcosa del genere, solo che
si parla sempre e comunque di 'invio posta' e non di 'ricezione'.
Avevo infatti bisogno di acquisire le mail impostando i parametri
dell'account assieme al server pop, potendo quindi popolare una mia tabella
access del contenuto di ogni mail in arrivo.

In effetti, sto provando con la procedura che mi ha fornito gentilmente
Bruno, anche se in questo modo sono obbligato ad installare e configurare un
Account e referenziare la giusta libreria di collegamento in Access su ogni
postazione utilizzata.

Se conosci l'esistenza di esempi sullai ricevezione di posta senza l'adozioe
di alcun client installato, mi faresti un gran favore se mi dai il
riferimento o un link...
Grazie ancora in ogni caso.
Marco67


radica...@gmail.com

unread,
Jan 24, 2015, 12:02:30 PM1/24/15
to
Il giorno venerdì 23 gennaio 2015 15:37:22 UTC+1, Marco_280167 ha scritto:

> Grazie 1000 davvero, in effetti avevo trovato qualcosa del genere,
> solo che si parla sempre e comunque di 'invio posta' e non di
> 'ricezione'.

Ho capito

Per la ricezione devi studiare per bene questo link :
https://emailarchitect.net/eagetmail/kb/vb.aspx

devi primariamente installare sul tuo PC il componente EAGetMail
indicato nel link

fammi sapere




Marco67

unread,
Jan 26, 2015, 11:50:32 AM1/26/15
to

<radica...@gmail.com> ha scritto nel messaggio
news:d6012c92-e295-43f0...@googlegroups.com...
Perfetto direi, ho installato il componente e dopo l'impostazione del mio
account, scarica tranquillamente le mail.
Direi che e' proprio quello che cercavo.

Una cosa, nei vari link del sito, ho trovato anche una guida per
registrazione un file manifest, che a quanto ho capito mi permetterebbe di
non dover fare installare sul pc dell'utente, ma basterebbe salvare questo
file con lo stesso nome del progetto ed il tutto dovrebbe funzionare!?
Ecco il link
https://www.emailarchitect.net/eagetmail/sdk/?ct=object_reg_a

Forse perche' il progetto di cui parla, non e' un eseguibile .exe ma un .mde
??
Che ne pensi?
In ogni caso, direi perfetto, e ancora un grazie infinite!
Marco67


radica...@gmail.com

unread,
Jan 28, 2015, 1:39:52 AM1/28/15
to
Il giorno lunedì 26 gennaio 2015 17:50:32 UTC+1, Marco67 ha scritto:
> <radica...@gmail.com> ha scritto nel messaggio
> news:d6012c92-e295-43f0...@googlegroups.com...
> Il giorno venerdì 23 gennaio 2015 15:37:22 UTC+1, Marco_280167 ha scritto:
>
> > Grazie 1000 davvero, in effetti avevo trovato qualcosa del genere,
> > solo che si parla sempre e comunque di 'invio posta' e non di
> > 'ricezione'.
>
> Ho capito
>
> Per la ricezione devi studiare per bene questo link :
> https://emailarchitect.net/eagetmail/kb/vb.aspx
>
> devi primariamente installare sul tuo PC il componente EAGetMail
> indicato nel link
>
> fammi sapere
>
> Perfetto direi, ho installato il componente e dopo l'impostazione
> del mio account, scarica tranquillamente le mail.
> Direi che e' proprio quello che cercavo.

Perfetto

> Una cosa, nei vari link del sito, ho trovato anche una guida per
> registrazione un file manifest, che a quanto ho capito mi
> permetterebbe di non dover fare installare sul pc dell'utente, ma
> basterebbe salvare questo file con lo stesso nome del progetto ed
> il tutto dovrebbe funzionare!?
> Ecco il link
> https://www.emailarchitect.net/eagetmail/sdk/?ct=object_reg_a
>
> Forse perche' il progetto di cui parla, non e' un eseguibile .exe ma
> un .mde ??

Direi di no, dal momento che il link parla di componente (COM)

> Che ne pensi?

E' la prima volta che vedo una cosa simile per cui perdonami ma la
prudenza impone di non allargarmi troppo.

Quello che posso dire e' che una *installazione* in senso classico e'
concettualmente separabile in due fasi distinte :

- copia sul pc dei vari files (ovviamente)
- registrazione. Ossia scrivere nel file *registro* (che e' un file
di testo particolare ad uso esclusivo del sistema operativo) alcune
informazioni sui files copiati.

Con la registrazione in realta' tu rendi "noto" al sistema operativo
che c'e' questa nuova applicazione, dove si trova ecc ecc. Questo
perche' quando tu "apri" l'applicazione in realta' tu CHIEDI al
sistema operativo di caricarla in memoria indi il sistema operativo
deve avere tutte le info necessarie per fare questa attivita' (in
realta' abbastanza delicata).

Ora, quel link non mi pare (dico : non mi PARE) che spieghi bene come
funzionerebbe invece questo meccanismo della semplice copia PERO' vedo
che fornisce un bel po' di info all' SO, in ogni caso.

Non saprei. Mi dispiace.

Marco67

unread,
Jan 28, 2015, 9:10:06 AM1/28/15
to

<radica...@gmail.com> ha scritto nel messaggio
news:a343bd81-a472-44d7...@googlegroups.com...
**
Si, in effetti la sensazione di 'esagerata semplificazione' di questo metodo
per aggirare l'installazione del componente... mi ha suggerito di chiederti
'sta cosa.
In ogi caso vado avanti, ti aggiornero' su cio' che 'scopro'.
Grazie ancora


radica...@gmail.com

unread,
Jan 29, 2015, 4:05:27 AM1/29/15
to
> In ogni caso vado avanti, ti aggiornero' su cio' che 'scopro'.

Ci conto. Interessa molto anche a me :-)

> Grazie ancora

Grazie a te !

0 new messages