Allegare più file ad una mail

di il
14 risposte

Allegare più file ad una mail

Salve a tutti. Ho una problematica...
Ho creato un database, dal quale tramite un pulsante, si allega un report in formato pdf ad una mail insieme a destinatario, oggetto, messaggio ecc ecc.
Per fare questo, ho utilizzato la funzione DoCmd.SendObject acSendReport, "Nome report", acFormatPDF, sMail, , , "Oggetto", "Testo del messaggio", True.
Tutto funziona regolarmente, solo che avrei la necessità di allegare ad ogni mail che invio, oltre al report descritto (che viene di volta in volta compilato secondo alcuni criteri), dovrei allegare anche un altro file pdf (che è sempre lo stesso). Quindi due allegati per ogni mail che invio. Specifico meglio: uno è il report convertito in pdf, e l'altro è un pdf in locale sul pc.
Non riesco a capire come fare.
Grazie.

14 Risposte

  • Re: Allegare più file ad una mail

    Non puoi con quel metodo, devi usare una Libreria dedicata come MAPI o se vuoi MsOutlook, o CDO...!
  • Re: Allegare più file ad una mail

    Grazie
    Tra l'altro ho provato anche a creare un modulo in outlook che allega un file all'apertura di un nuovo messaggio. Tale modulo funziona correttamente quando lo lancio da outlook. Ho provato ad attivare l'esecuzione automatica delle macro nelle opzioni di outlook ma non va. Inoltre non funziona nemmeno quando il messaggio me lo apre access dal mio database.
    Per quanto riguarda le librerie menzionate, non le ho mai usate. Qualche suggerimento?
  • Re: Allegare più file ad una mail

    Esempio con Outlook:
    https://codekabinett.com/page.php?Lang=2&Theme=1
    meglio questo con il LateBinding:
    http://www.utteraccess.com/forum/index.php?showtopic=2036078

    CDO:
    https://www.ozgrid.com/forum/forum/other-software-applications/excel-and-or-email-help/70810-add-attachment-with-cdo-vba-excel
    https://codekabinett.com/rdumps.php?Lang=2&targetDoc=send-email-access-vba-cdo

    Ricorda di convertire tutto in LATEBINDING quando funziona...
  • Re: Allegare più file ad una mail

    Grazie mille Alex. Dò un'occhiata e vediamo cosa riesco a combinare!
  • Re: Allegare più file ad una mail

    Salve a tutti. Ho dato un'occhiatina ai link citati da alex, ma ho un pò di confusione. Mi pare di capire che con quei metodi si possano aggiungere più allegati, ma da file locali o simili.
    Nel mio caso, dei file che vorrei allegare alla mail, un file deve provenire da un report che si aggiorna di volta in volta secondo dei criteri ben precisi, mentre l'altro file risiede in locale sul pc, e non subisce alcuna variazione. Va solo allegato ad ogni mail.
  • Re: Allegare più file ad una mail

    sevenhertz ha scritto:


    Salve a tutti. Ho dato un'occhiatina ai link citati da alex, ma ho un pò di confusione. Mi pare di capire che con quei metodi si possano aggiungere più allegati, ma da file locali o simili.
    Si infatti file Locali... simili non è un termine qualificativo.
    Quello che devi fare tu è proprio Allegare FILE LOCALI...!!!

    sevenhertz ha scritto:


    Nel mio caso, dei file che vorrei allegare alla mail, un file deve provenire da un report che si aggiorna di volta in volta secondo dei criteri ben precisi
    Il Report in se non si allega... puoi STAMPARLO in PDF e poi allegarlo... e come puoi immaginare è un FILE...

    sevenhertz ha scritto:


    , mentre l'altro file risiede in locale sul pc, e non subisce alcuna variazione. Va solo allegato ad ogni mail.
    Anche questo è un file, cosa conta se non subisce variazioni...?
    Anzi è il secondo file da allegare che ti obbliga ad usare quanto ti ho spiegato.

    Sei sicuro di aver capito bene quello che devi fare...?
  • Re: Allegare più file ad una mail

    Grazie Alex

    sevenhertz ha scritto:


    Sei sicuro di aver capito bene quello che devi fare...?
    Sinceramente ho un pò di confusione... Se puoi spiegarmi meglio come devo fare, te ne sarei molto grato...
  • Re: Allegare più file ad una mail

    La prima cosa che devi capire è che un REPORT non si può inviare se non in PDF, e se dovessi invare solo questo basterebbe l'Uso di SendObject, come spiego sotto, ma se devi aggiungere un ulteriore allegato... NO.

    Quindi se devi inviare una Mail con SOLO ALLEGATO il Report in PDF puoi usare SendMail documentato in Access
    DoCmd.SendObject acSendReport, "rptFatture", acFormatPDF, "someone@somewhere.invalid", , , _
    					"Email with attached report", "This is the email body.", True
    Ovviamente mandi via SOLO QUESTO.

    Se devi invare oltre al PDF del Report anche un'altro allegato... il metodo è completamente differente.. prima stampi il report generando un FILE LOCALE in PDF, poi apri un Server di Automazione per l'INVIO MAIL da codice compilando i campi Object/TO/CC/BCC/BODY e poi aggiungi alla Collection Attachment prima il tuo REPORT pdf fornendo il Percorso Completo al mentodo Attachment ... e poi aggiungi l'altro file...!

    Per stampare il PDF puoi usare questo metodo:
    
    DoCmd.OpenReport "rptFatture", acViewPreview, "", "[ID_Fattura]=" & TuoNUmeroFattura, acHidden
    DoCmd.OutputTo acOutputReport, "rptFatture", acFormatPDF, "C:\Percorso\NomeReportFattura1.Pdf", True
    DoCmd.Close acReport,"rptFatture"
    
    Quindi usando il codice che trovi quì:https://codekabinett.com/rdumps.php?Lang=2&targetDoc=send-email-access-vba-cdo
    andrai ad inserire
    Public Sub SendSimpleCDOMail()
        Const cdoSendUsingPort=2
        Dim mail    As Object          
        Dim config  As Object    
        
        Set mail = CreateObject("CDO.Message")
        Set config = CreateObject("CDO.Configuration")
        
        config.Fields(cdoSendUsingMethod).Value = cdoSendUsingPort
        config.Fields(cdoSMTPServer).Value = "localhost"
        config.Fields(cdoSMTPServerPort).Value = 25
        config.Fields.Update
        
        Set mail.Configuration = config
        
        With mail
            .To = "someone@somewhere.invalid"
            .From = "me@mycompany.invalid"
            .Subject = "First email with CDO"
            .TextBody = "This is the body of the first plain text email with CDO."
            
            .AddAttachment "C:\path\NomeReport.pdf"
            .AddAttachment "C:\path\AltroFile.XLS"
            .Send
        End With
        
        Set config = Nothing
        Set mail = Nothing
        
    End Sub
    Attenzione che potrebbe essere necessario conoscere il Server delle Mail in INVIO... ed inserirlo al posto di questo config.Fields(cdoSMTPServer).Value al posto di LocalHost...
    http://www.utteraccess.com/forum/Sending-Email-Smtp-CDO-t1957295.html

    Le info che hai ora sono il massimo che si può fornirti... non è per completi inesperti... serve un minimo di base...!
  • Re: Allegare più file ad una mail

    Grazie mille... In effetti il metodo che avevo utilizzato per creare il pdf da report era proprio quello che mi hai indicato... docmd ecc ecc.
    Grazie per le preziosissime info.... provo ad applicare il tutto e ti aggiorno sul risultato... A presto
  • Re: Allegare più file ad una mail

    Dunque... ho fatto vari tentativi.
    Il primo passo da te descritto è quello più semplice, e funziona tutto regolarmente.
    Nel secondo passaggio, ho fatto vari tentativi, ma ho riscontrato alcune problematiche: la prima è che il modulo deve essere lanciato su click.
    La seconda è che nella configurazione della mail, l'indirizzo del destinatario varia di volta in volta , quindi ho impostato una variabile sMail che richiama il valore da una maschera. Ma non funziona... Poi, il file pdf che proviene dal report, cambia di volta in volta (come faccio a richiamarlo di volta in volta? sangue dal naso!!! )
    Questo è il codice che ho compilato....

    Option Compare Database

    Private Sub Comando5_Click()


    Dim Nomefile, sCodice_azienda As String
    sCodice_azienda = Format([Forms]![Invio_documento]![Codice_azienda])
    sAzienda = Format([Forms]![Invio_documento]![Nome_Azienda])
    Nomefile = sAzienda & " " & sCodice_azienda
    DoCmd.OutputTo acOutputReport, "Invio_documento", acFormatPDF, "C:\percorso\" & Nomefile & ".pdf", False

    End Sub

    E fin qui tutto ok.... poi
    -------------------------------------------------------------------
    Public Sub SendSimpleCDOMail Comando9_Click()
    Const cdoSendUsingPort = 2
    Dim mail As Object
    Dim config As Object



    Set mail = CreateObject("CDO.Message")
    Set config = CreateObject("CDO.Configuration")

    config.Fields(cdoSendUsingMethod).Value = cdoSendUsingPort
    config.Fields(cdoSMTPServer).Value = "localhost"
    config.Fields(cdoSMTPServerPort).Value = 25
    config.Fields.Update

    Set mail.Configuration = config

    sMail = ([Forms]![Invio_documento]![mail])

    With mail

    .To = sMail
    .From = "mio@indirizzomail"
    .Subject = "Invio documento"
    .TextBody = "bla bla bla bla"

    '.AddAttachment "C:\path\NomeReport.pdf" <-------------- come fa a cambiare di volta in volta?
    .AddAttachment "C:\percorso file .pdf"
    .Send
    End With

    Set config = Nothing
    Set mail = Nothing

    End Sub
  • Re: Allegare più file ad una mail

    Se non metti i TAG code non si capisce nulla.

    sevenhertz ha scritto:


    Dunque... ho fatto vari tentativi.
    Il primo passo da te descritto è quello più semplice, e funziona tutto regolarmente.
    Bene.

    sevenhertz ha scritto:


    Nel secondo passaggio, ho fatto vari tentativi, ma ho riscontrato alcune problematiche: la prima è che il modulo deve essere lanciato su click.
    Diciamo che necessita di un EVENTO, che sia Click è un dettaglio non vero in assoluto, lo puoi richiamare anche in altro modo.

    sevenhertz ha scritto:


    La seconda è che nella configurazione della mail, l'indirizzo del destinatario varia di volta in volta , quindi ho impostato una variabile sMail che richiama il valore da una maschera.Ma non funziona...
    Per questo motivo dovresti strutturare una FUNZIONE con parametri... e passarglieli...!
    Di fatto quando chiami la Funzione costruisci i "TO/CC/OBJECT/BODY ed un Array di Attachment), in questo modo la puoi chiamare da qualsiasi parte del codice e non solo da quella Form...!

    Es:
    
    Public Function SendSimpleCDOMail(mFrom As String, _
                                      mTo As String, _
                                      mCc As String, _
                                      mSubject As String, _
                                      mTextBody As String, _
                                      ParamArray arrAtt()) As Boolean
                                 
        Dim mail        As CDO.MESSAGE
        Dim config      As CDO.Configuration
        Dim iAtt        As Integer
        
        Set mail = CreateObject("CDO.Message")
        Set config = CreateObject("CDO.Configuration")
        
        config.Fields(cdoSendUsingMethod).Value = cdoSendUsingPort
        config.Fields(cdoSMTPServer).Value = "mail.mycompany.invalid"
        config.Fields(cdoSMTPServerPort).Value = 25
        config.Fields.Update
        
        iAttCount = UBound(arrAtt())
        
        Set mail.Configuration = config
        
        With mail
            .To = mTo
            .From = mFrom
            .Subject = mSubject
            .TextBody = mTextBody
            
            If UBound(arrAtt()) > 0 Then
                For iAtt = 0 To UBound(arrAtt())
                    .AddAttachment arrAtt(iAtt)
                Next
            End If
            .Send
        End With
        
        Set config = Nothing
        Set mail = Nothing
        
    End Function
    Attenzione a come si usa il ParamArray... in sostanza metti di seguito gli Allegati, per chiamarla quindi:
    Call SendSimpleCDOMail(Me.txtSENDER, _
                           Me.txtDestinatari, _
                           Me.txtSubject, _
                           Me.txtTextBody, _
                           "C:\Allegato1.pdf", _
                           "D:\Allegato2.Doc", "F:\Allegato3.Zip")
    
    Ovviamente è solo un esempio non ho testato il codice e non ho inserito la Gestione errori... che devi ASSOLUTAMENTE IMPARARE ad usare.

    sevenhertz ha scritto:


    Poi, il file pdf che proviene dal report, cambia di volta in volta (come faccio a richiamarlo di volta in volta? sangue dal naso!!! )
    Inserendolo nell'Array da passare alla Funzione di prima...

    sevenhertz ha scritto:


    Questo è il codice che ho compilato....
    Quello è solo CODICE di compilato non ha nulla.
  • Re: Allegare più file ad una mail

    Grazie mille per i preziosi consigli, Alex, ma mi rendo conto che si sta andando ben oltre le mie conoscenze. Ho fatto svariate prove, ma sono in totale confusione. Tuttavia, mi farebbe molto piacere ricevere un aiuto un pò più specifico per ottenere il risultato che vorrei, applicando al codice la mia situazione e i miei campi. Grazie ancora
  • Re: Allegare più file ad una mail

    Direi che hai avuto un aiuto MOLTO MOLTO specifico, forse troppo... ora devi lavorarci sopra e colmare le lacune per concludere in autonomia, il forum normalmente non fornisce "codice specifico" ed io ho già abbondantemente superato questa regola.
    Buon lavoro.
  • Re: Allegare più file ad una mail

    Ok grazie
Devi accedere o registrarti per scrivere nel forum
14 risposte