Invio report pdf tramite Mapi

di il
12 risposte

Invio report pdf tramite Mapi

Buongiorno a tutti

devo inviare via mail degli allegati pdf creandoli a partire da un report richiamato via codice. (RptFatture)

Vorrei utilizzare Mapi come da precedenti discussioni per evitare di aprire Outlook o qualsiasi gestore di posta installato

https://www.iprogrammatori.it/forum-programmazione/access/inviare-pdf-via-mail-t19390.html

Ho inserito il modulo di classe clsMapiSendMail

Il problema è che negli esempi si parte da un click su una maschera mentre io ho necessita di filtrare il report in modo da inviare l'allegato corretto per ogni soggetto.

Ho provato a fare così


Dim cnn         As ADODB.Connection
    
    Set cnn = CurrentProject.Connection
    
    Dim rst         As ADODB.Recordset
    Set rst = New ADODB.Recordset

    rst.Open "QryGestioneSdd", cnn, adOpenStatic, adLockOptimistic, adCmdTableDirect

Dim OggettoMail         As String ' contiene l'oggetto della email
Dim CorpoMail           As String ' contiene il testo del messaggio
Dim SendMail            As clsMAPISendMail 'Richiama la classe
Dim lngLoop             As Long
Dim lngResult           As Long

Set SendMail = New clsMAPISendMail

If Not (rst.EOF And rst.BOF) Then
        rst.MoveFirst
        Do Until rst.EOF
            DestinatarioMail = DestinatarioMail = rst.Fields("E-Mail")
            OggettoMail = "Fattura Servizi Associati"
            CorpoMail = "Ciao"
            
            With SendMail
            
                Call .AddTo("", DestinatarioMail)
                Call .AddBCC("", NostraMail)
            
            .Subject = OggettoMail
            .Body = CorpoMail
            
    
            End With
           
           Loop
    End If 
            
ora dovrei aggiungere la Call a .FileAdd e poi inviare

ma come faccio a fare in modo che crei il pdf dal report filtrato?

scusate se mi sono espresso in modo non chiaro ma per me è difficile spiegarlo diversamente

Stefano

12 Risposte

  • Re: Invio report pdf tramite Mapi

    Per stampare il tuo report in PDF hai le funzioni native di access...

    https://stackoverflow.com/questions/2296884/how-can-i-output-a-report-in-pdf-format-where-the-name-consists-of-values-from
    https://www.devhut.net/2019/05/13/ms-access-print-individual-pdfs-of-a-report/

    Generato il documento, lo inserisci come allegato, ovviamente devi sapere il PATH completo, ma dal momento che lo salvi lo sai...

    Fai attenzione, che se generi il Report nel ciclo potresti non riuscire a gestire in modo SINCRONO, quindi rischi di non aver generato il PDF e voler inviare la mail...
    Se i report sono molti, potrebbe convenire prima generare i Report, salvi tutti i PATH in un Array Bidimensionale con Chiave e Path, poi quando componi la mail cerchi la Chiave e recuperi il PATH da passare all'allegato.

    Ovviamente il tutto dipende molto dalla tua autonomia.
  • Re: Invio report pdf tramite Mapi

    Ciao

    Grazie Alex

    ho capito come fare per creare il pdf grazie agli esempi che hai segnalato.

    Il problema della sincronia l'ho capita concettualmente (Si rischia di avere la mail pronta ma non il pdf)

    I file saranno una cinquantina alla volta

    Pensi che si possa risolvere facendo un ciclo di wait oppure bisogna passare alla creazione dell'Array come suggerivi?


    Stefano

    P.S. ne approfitto per ringraziarti per tutte le volte che in questi anni ho trovato risposta nei tuoi post (senza neppure dover chiedere )
  • Re: Invio report pdf tramite Mapi

    Secondo me con una 50ina potresti avere problemi... tuttavia prova per non creare difficoltà se magari non ci sono.
    Personalmente non inserirei mai un WAIT di questo tipo, perchè vai ad impegnare un sacco di tempo anche in modo inutile, e non risolvi il problema della SINCRONIA... ma anche quì vale quanto sopra, da verificare.

    Il metodo migliore, che non ho suggerito, è usare una Collection con una Classe per memorizzare il Path generato, che consente la ricerca senza dover scorrere l'array, ma semplicemente puntando alla KEY con la PK del Record puntato dal ciclo, tuttavia questa soluzione è meno immediata.
  • Re: Invio report pdf tramite Mapi

    Sto provando a vedere se con 50 invii da problemi

    purtroppo si blocca e mi dice che non vi è nessun mail client di default o comunque non riesce a eseguire la richiesta.

    questo succede anche nel db demo

    (una parentesi veloce nel caso serva a a qualcuno il db di prova l'ho aggiornato a 64 bit aggiungendo nelle dichiarazioni ptrSafe e dimensionando recipients e files come LongPtr in quanto VarPtr restituisce un LongPtr nel 64bit)


    Avevo capito che utilizzando il Mapi non avevo bisogno di utilizzare Outlook o qualsiasi altro gestore di posta ho capito male?


    inoltre nonostante lo apra con Hidden il report appare lo stesso per poi chiudersi come faccio ad evitarlo?

    Grazie

    Stefano
    Allegati:
    27207_b8a6c5ccd07ec1a3e696d25aaf6486cc.png
    27207_b8a6c5ccd07ec1a3e696d25aaf6486cc.png
  • Re: Invio report pdf tramite Mapi

    L'errore è in questa funzione
    
    Public Function Send() As Long
        Dim lngFlags As Long
        Send = MAPI_E_INVALID_RECIPS
        With m_Message
            If m_AttachmentsCount > 0 Then
                .FileCount = m_AttachmentsCount
                .Files = VarPtr(m_Attachments(0))
            End If
            If m_RecipientsCount > 0 Then
                .RecipCount = m_RecipientsCount
                .Recipients = VarPtr(m_Recipients(0))
                If m_SessionID = 0 Then Call MAPILogon(ByVal 0&, vbNullChar, vbNullChar, MAPI_LOGON_UI Or MAPI_PASSWORD_UI, ByVal 0&, m_SessionID)
                If Not m_SendImmediately Then lngFlags = MAPI_DIALOG
                Send = MAPISendMail(ByVal 0&, ByVal 0&, m_Message, lngFlags, ByVal 0&)
            End If
        End With
    End Function
    
    su questa riga
    
    
    If m_SessionID = 0 Then Call MAPILogon(ByVal 0&, vbNullChar, vbNullChar, MAPI_LOGON_UI Or MAPI_PASSWORD_UI, ByVal 0&, m_SessionID)
    
    
    sicuramente c'è qualcosa che non capisco

    Stefano
  • Re: Invio report pdf tramite Mapi

    Hai le librerie MAPI installate...?
    MsOutlook si appoggia a MAPI... e se non hai MAPI che espone COM INTERFCAE, wrappata dalla classe, è ovvio che non vada...!

    https://stackoverflow.com/questions/3403708/detect-if-exchange-mapi-is-installed
  • Re: Invio report pdf tramite Mapi

    Avevo pensato anch'io la stessa cosa ma Outlook funziona e riceve e invia la posta
    E' anche il gestore di posta predefinito

    se clicco su un campo dove c'è una mail in una maschera mi apre la finestra di invio di Outlook con l'indirizzo regolarmente nel campo to

    andando a vedere nel registro in effetti non trovo

    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\ExchangeMAPI key exists


    non capisco

    Stefano
    Allegati:
    27207_cfa3b11e9f310eb22a63fa96eb7b1c41.png
    27207_cfa3b11e9f310eb22a63fa96eb7b1c41.png
  • Re: Invio report pdf tramite Mapi

    Ho anche provato a ripristinare Office ma niente

    Ho provato su un altro computer (con windows2016 server) e in effetti appare la richiesta di password ma poi da errore 2

    (dopo aver premuto consenti)

    Stefano
    Allegati:
    27207_de77038d38f323bac2b9a9bdbcfc9fec.png
    27207_de77038d38f323bac2b9a9bdbcfc9fec.png

    27207_d7d37e3bf0ba7fc3e0731242aa86506e.png
    27207_d7d37e3bf0ba7fc3e0731242aa86506e.png
  • Re: Invio report pdf tramite Mapi

    Provato con una macchina windows 10 enterprise e il demo funziona

    con thunderbird come predefinito

    mi metto a piangere

    Stefano
  • Re: Invio report pdf tramite Mapi

    Aggiorno se può essere utile a qualcuno

    sono riuscito a fare l'invio della mail disintallando le versioni di office presenti sul computer e installando office 2019

    CIao a tutti
  • Re: Invio report pdf tramite Mapi

    Bene, non sapevo cosa suggerire in quanto era strano non andasse... quel demo che feci è vecchiotto...

    Ciao
  • Re: Invio report pdf tramite Mapi

    Ciao

    vecchiotto ma utile



    Stefano
Devi accedere o registrarti per scrivere nel forum
12 risposte