Inviare email con allegato pdf esterno

di il
14 risposte

Inviare email con allegato pdf esterno

Ho l'esigenza di allegare un file in formato pdf ad una mail partendo da una maschera
Il path del file è il valore di un campo della maschera (nomefilerda) , di tipo testo.

Con il codice seguente, che attivo con doppio click su pulsante, mi prepara correttamente la mail ma non mi allega il file.
Private Sub Descrizione_DblClick(Cancel As Integer)
DoCmd.SetWarnings False
   Dim NC As String
   NC = Forms![rda_approval]![nomefilerda].Value 'con NC nome del campo NOMEFILERDA
   DoCmd.SendObject acSendNoObject, NC, , "TO","CC", "", NC, "Invio RDA APPROVED Servizi Commessa generato automaticamente"
End Sub
dove commetto errori? forse Do.Cmd.SendObject non si può usare con oggetti non interni al database?

14 Risposte

  • Re: Inviare email con allegato pdf esterno

    Se stampi un report in PDF puoi inviarlo... ma se vuoi inviare mail con allegato esterno... no devi usare librerie specifiche come Outlook o MAPI o CDO.
  • Re: Inviare email con allegato pdf esterno

    gfrullo ha scritto:


    Ho l'esigenza di allegare un file in formato pdf ad una mail partendo da una maschera
    Il path del file è il valore di un campo della maschera (nomefilerda) , di tipo testo.

    Con il codice seguente, che attivo con doppio click su pulsante, mi prepara correttamente la mail ma non mi allega il file.
    Private Sub Descrizione_DblClick(Cancel As Integer)
    DoCmd.SetWarnings False
       Dim NC As String
       NC = Forms![rda_approval]![nomefilerda].Value 'con NC nome del campo NOMEFILERDA
       DoCmd.SendObject acSendNoObject, NC, , "TO","CC", "", NC, "Invio RDA APPROVED Servizi Commessa generato automaticamente"
    End Sub
    dove commetto errori? forse Do.Cmd.SendObject non si può usare con oggetti non interni al database?
    suggerimento
    .Attachments.Add 
  • Re: Inviare email con allegato pdf esterno

    MARMAURO ha scritto:


    suggerimento
    .Attachments.Add 
    Che suggerimento sarebbe questo...?
    Convieni che nessun oggetto nativo di Access esponga quella Collection né quel metodo Add...?
    Sicché conviene dare suggerimenti più adeguati indica la Libreria almeno a cui ti riferisci con l'istanza principale dell'oggetto... altrimenti cos sai capisce...?
  • Re: Inviare email con allegato pdf esterno

    @Alex ha scritto:


    MARMAURO ha scritto:


    suggerimento
    .Attachments.Add 
    Che suggerimento sarebbe questo...?
    Convieni che nessun oggetto nativo di Access esponga quella Collection né quel metodo Add...?
    Sicché conviene dare suggerimenti più adeguati indica la Libreria almeno a cui ti riferisci con l'istanza principale dell'oggetto... altrimenti cos sai capisce...?
    meglio così ? o troppe informazioni?....
    'Invio le informazioni ad outlook
        Set outApp = CreateObject("Outlook.Application")
        Set outMsg = outApp.CreateItem(olMailItem)
        With outMsg
          .Importance = olImportanceHigh
          .To = Email
          .CC = ""
          .BCC = ""
          .Subject = Oggetto
          .HTMLBody = Corpo & vbNewLine & vbNewLine & Signature ' aggiungo anche la firma al corpo
                
          .Attachments.Add  (qui il percorso del file da  allegare)
        
           'invio la mail con l'allegato
          .Send
       End With

    Allegati:
    25463_dd4d6feb6d6715edc958183ff8cdf2d5.jpg
    25463_dd4d6feb6d6715edc958183ff8cdf2d5.jpg
  • Re: Inviare email con allegato pdf esterno

    Piuttosto di darne in modo incomprensibile... speriamo che il suo MsOurlook sia configurato ed usato come MailClient....

    In ogni caso non si usa mail l'inserimento dei riferimenti nel progetto(EarlyBinding) perché è vincolante.
    Meglio suggerire Latebinding.
  • Re: Inviare email con allegato pdf esterno

    @Alex ha scritto:


    Piuttosto di darne in modo incomprensibile... speriamo che il suo MsOurlook sia configurato ed usato come MailClient....

    In ogni caso non si usa mail l'inserimento dei riferimenti nel progetto(EarlyBinding) perché è vincolante.
    Meglio suggerire Latebinding.
    Concordo con te ... e ti giuro che non voglio fare polemica... Ho solo condiviso la soluzione che io ho applicato per risolvere questo problema...magari a qualcuno può bastare... è vero che vincolato a MSOutlook e che questo deve essere configurato come mail client e questa è una limitazione.
  • Re: Inviare email con allegato pdf esterno

    Grazie all'osservazione di @Alex ho anch'io il mio modificato codice... in meglio direi:
    Per passare da EarlyBinding a Latebinding
    sostituire :
    Dim outApp As OUTLOOK.Application =====> diventa Dim outApp As Object
    Dim outMsg As MailItem =====> diventa Dim outMsg As Object

    Set outApp = CreateObject("Outlook.Application")
    Set outMsg = outApp.CreateItem(olMailItem) ====> diventa Set outMsg = outApp.CreateItem(0)

    Nei riferimenti togliere la spunta sulla libreria di MSOutlook
  • Re: Inviare email con allegato pdf esterno

    Grazie!!
    Ho risolto così e funziona.
    Private Sub ID_DblClick(Cancel As Integer)
    Dim NC As String
    NC = Forms![rda_approval]![nomefilerda].Value 'con NC nome del campo NOMEFILE
        Set outApp = CreateObject("Outlook.Application")
        Set outMsg = outApp.CreateItem(olMailItem)
        With outMsg
          .Importance = olImportanceHigh
          .To = "indirizzoemail1"
          .CC = "indirizzoemail2"
          .BCC = ""
          .Subject = NC
          .Attachments.Add (NC)
          .HTMLBody = "testo corpo" & "" & "" & "//__GG"  ' aggiungo anche la firma al corpo
           'invio la mail con l'allegato
          .Send
       End With
    End Sub
    G
  • Re: Inviare email con allegato pdf esterno

    Se Outlook fosse aperto si deve recuperare l'istanza aperta non aprirne una Nuova... usando GetObject e gestendo l'errore 429...
    Alla fine di tutti l'istanza va chiusa altrimenti te la trovi nell'elenco dei processi e ne apri uno ogni volta che lo lanci...
  • Re: Inviare email con allegato pdf esterno

    gfrullo ha scritto:


    Grazie!!
    Ho risolto così e funziona.
    Private Sub ID_DblClick(Cancel As Integer)
    Dim NC As String
    NC = Forms![rda_approval]![nomefilerda].Value 'con NC nome del campo NOMEFILE
        Set outApp = CreateObject("Outlook.Application")
        Set outMsg = outApp.CreateItem(olMailItem)
        With outMsg
          .Importance = olImportanceHigh
          .To = "indirizzoemail1"
          .CC = "indirizzoemail2"
          .BCC = ""
          .Subject = NC
          .Attachments.Add (NC)
          .HTMLBody = "testo corpo" & "" & "" & "//__GG"  ' aggiungo anche la firma al corpo
           'invio la mail con l'allegato
          .Send
       End With
    End Sub
    G
    Ottimo.. bene...

    visto che mancava un pezzettino di codice (colpa mia) .... metti alla fine ...
    Set outApp = Nothing
    Set outMsg = Nothing
  • Re: Inviare email con allegato pdf esterno

    Manca nulla...?
    Il quit dell'istanza di Mso...?
    Dal momento che la istanti nuova... magari chiudiamola...
  • Re: Inviare email con allegato pdf esterno

    @Alex ha scritto:


    Manca nulla...?
    Il quit dell'istanza di Mso...?
    Dal momento che la istanti nuova... magari chiudiamola...
    Giusto??
    outApp.Application.Quit
    oppure
    outApp.Quit
    Sinceramente....evidentemente sbagliando...a me ha sempre funzionato....

    Grazie
  • Re: Inviare email con allegato pdf esterno

    Come sempre le cose si possono fare in diversi modi... uno di questi è farle bene...!
    
    Function SendMail(.... <parametri vari>...) As Boolean
        On Error GoTo Err_Handler
        Const mcProcName       As String= "SendMail"
        Const mcProcParent      As String = "NomeMaschera"
        Dim olApp   As Object
        Dim olMsg   As Object
        Dim bCrateOpen  As Boolean
        
        Set olApp = GetObject(, "Outlook.Application")
        Set outMsg = outApp.CreateItem(olMailItem)
        
        ....
       SendMail=true
       
     Exit_Here:
        On Error Resume Next
        Set outMsg = Nothing
        
        If bCrateOpen  Then olApp.Quit
        Set olApp = Nothing
    
        Exit Function
    
    Err_Handler:
        Select Case Err.Number
            Case 429
                Set olApp = CreateObject("Outlook.Application")
                bCrateOpen  = True
                Resume Next
            Case Else
                MsgBox Err.Number & " in " & mcProcParent & vbNewLine & Err.Description, vbCritical, mcProcName
        End Select
        Resume Exit_Here
    End Function
  • Re: Inviare email con allegato pdf esterno

    @Alex ha scritto:


    Come sempre le cose si possono fare in diversi modi... uno di questi è farle bene...!
    
    Function SendMail(.... <parametri vari>...) As Boolean
        On Error GoTo Err_Handler
        Const mcProcName       As String= "SendMail"
        Const mcProcParent      As String = "NomeMaschera"
        Dim olApp   As Object
        Dim olMsg   As Object
        Dim bCrateOpen  As Boolean
        
        Set olApp = GetObject(, "Outlook.Application")
        Set outMsg = outApp.CreateItem(olMailItem)
        
        ....
       SendMail=true
       
     Exit_Here:
        On Error Resume Next
        Set outMsg = Nothing
        
        If bCrateOpen  Then olApp.Quit
        Set olApp = Nothing
    
        Exit Function
    
    Err_Handler:
        Select Case Err.Number
            Case 429
                Set olApp = CreateObject("Outlook.Application")
                bCrateOpen  = True
                Resume Next
            Case Else
                MsgBox Err.Number & " in " & mcProcParent & vbNewLine & Err.Description, vbCritical, mcProcName
        End Select
        Resume Exit_Here
    End Function
    Troppo avanti per le mie conoscenze... grazie ora studio e poi applico...
Devi accedere o registrarti per scrivere nel forum
14 risposte