Copia di mail da posta Outlook a cartella

di il
6 risposte

Copia di mail da posta Outlook a cartella

Per copiare file da una cartella sorgente in una cartella destinazione utilizzo il codice seguente volutamente semplificato.

Public Sub ArchiviaFile()
Dim fd As Office.FileDialog
Dim fs As Object
Dim VarOrig As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Set fs = CreateObject("Scripting.FileSystemObject")
With fd
   .AllowMultiSelect = False
   .InitialView = msoFileDialogViewDetails
   .InitialFileName = "mia cartella sorgente"
   .Title = "seleziona il file"
   If .Show = True Then
       VarOrig = .SelectedItems(1)
       fs.copyfile VarOrig, "mio nome destinazione"
       MsgBox " il file è stato copiato"
   Else
       MsgBox "la procedura è stata interrotta", , "NOTIFICA"
   End If
End With
End Sub

In analogia vorrei selezionare una mail (file.msg) dalla posta di Outlook sorgente e copiarla in una cartella destinazione. Chiedo cortesemente consigli per questo.

Grazie

Un caro saluto a tutti

6 Risposte

  • Re: Copia di mail da posta Outlook a cartella

    Qualche cosa non mi è chiaro… e purtroppo in analogia tra le 2 cose non c'è nulla. .

    Per copiare un messaggio da MSO ad una cartella devi accedere alla libreria MSO usando la sua COM INTERFACE o AUTOMAZIONE, recuperare l'oggetto MailItem ed effettuare un SaveAs sull'oggetto passando il parh.

    Questo link mostra il metodo SaveAs dell'oggetto MIlItem:l

    https://learn.microsoft.com/en-us/office/vba/api/outlook.mailitem.saveas

    Ora il problema è dove e come memorizzi il riferimento o la chiave per andare a selezionare la mail corretta che tu vuoi salvare…?

    Ogni mail è un oggetto mailitem… che è indicizzato ma devi sapere come recuperarla da MsAcces… come relazioni Access con MSO…?

  • Re: Copia di mail da posta Outlook a cartella

    Grazie Alex, il link che mi hai suggerito sembra chiaro, così come i passi da seguire. Quello che sto cercando di fare è proprio accedere a MSO da Access, ma ad oggi non ho nulla di decente da proporre.

  • Re: Copia di mail da posta Outlook a cartella

    Con il codice che segue, sono riuscito a copiare in una cartella un elenco di mail precedentemente selezionate in Outlook.

    Sub CopiaMail()
    Dim olkApp As Object
    Dim olkMail As Outlook.MailItem
    Dim olkExp As Outlook.Explorer
    Dim olkSel As Outlook.Selection
    Dim i As Integer
    Set olkApp = New Outlook.Application
    Set olkExp = olkApp.ActiveExplorer
    Set olkSel = olkExp.Selection
    For i = 1 To olkSel.Count
       Set olkMail = olkSel.Item(i)
       olkMail.SaveAs "mia cartella" & olkMail.Subject & ".msg"
    Next i
    MsgBox "la procedura è terminata"
    End Sub
    

    Ogni commento o suggerimento per correggere o migliorare il codice è gradito.

    grazie

  • Re: Copia di mail da posta Outlook a cartella

    25/07/2023 - harry61 ha scritto:


    Ogni commento o suggerimento per correggere o migliorare il codice è gradito.

    Visto che tutto il resto è in earlybinding, usa lo stesso criterio anche per l'oggetto riferito all'applicazione

    Dim olkApp As Outlook.Application

    Ricorda però che potresti avere qualche problema se lo usi in computer che hanno un'altra versione di Office, specie se precedente a quella su cui stai sviluppando. Se poi vogliamo essere super precisi bisognerebbe impostare a Nothing tutti gli oggetti, anche se la teoria dice che quando escono dallo “scope” si distruggono da soli.

    Per il resto, che cosa intendi per correzioni o miglioramenti? Il codice fa quello che volevi che facesse?

  • Re: Copia di mail da posta Outlook a cartella

    Direi che conviene partire sempre dall'uso del LATEBINDINBG, riscriverei così:

    Sub CopiaMail()
    	Dim olkApp 	As Object
    	Dim olkMail As Object
    	Dim olkExp 	As Object
    	Dim olkSel 	As Object
    	Dim i As Integer
    	Set olkApp = CreateObject("Outlook.Application")
    	Set olkExp = olkApp.ActiveExplorer
    	Set olkSel = olkExp.Selection
    	For i = 1 To olkSel.Count
       		Set olkMail = olkSel.Item(i)
       		olkMail.SaveAs "mia cartella" & olkMail.Subject & ".msg"
    	Next i
    	MsgBox "la procedura è terminata"
    	olkApp.close
    	Set olkSel = Nothing
    	Set olkExp = Nothing
    	Set olkMail = Nothing
    	set olkApp = Nothing
    End Sub
  • Re: Copia di mail da posta Outlook a cartella

    Ringrazio Phil e Alex.

    26/07/2023 - Philcattivocarattere ha scritto:


    Per il resto, che cosa intendi per correzioni o miglioramenti? Il codice fa quello che volevi che facesse?

    Intendevo proprio interventi come il tuo e di Alex. Mi interessano opinioni e suggerimenti di persone esperte, che mi danno spunti per migliorare.

Devi accedere o registrarti per scrivere nel forum
6 risposte