Condividi tramite

Access invia mail con allegato

Anonimo
2016-07-03T15:39:42+00:00

Buon pomeriggio a tutti.

Ho la tabella "Avvisi" con un campo allegato (formato PDF) e ho la maschera continua "inviomail" (basata sulla tabella "avvisi").

Cliccando sul campo "indirizzomail" della maschera attivo il seguente codice:

Private Sub IndirizzoMail_Click()

Dim Attachment As Object

Dim Messaggio As String

Dim Mail As String

Messaggio = "Bla bla bla. Cordiali saluti. Pinco Pallino"

Mail = IndirizzoMail

DoCmd.SendObject , "Attachment", "PDFFormat(*.pdf)", Mail, , , "Avviso", Messaggio

End Sub

intendendo in questo modo inviare all'indirizzo mail selezionato il file allegato come attachment; ovviamente non funziona,  ma non riesco a trovare un'alternativa funzionante.

Inoltre quando il codice apre Outlook non viene riportata la "firma" che abitualmente invece si trova ogni volta che clicco su "nuovo" direttamente da Outlook (questo quesito è stato oggetto di un'apposita domanda alla community tempo fa , ma non ho mai ottenuto risposte).

Vi ringrazio da ora e vi auguro una buona domenica.

Andrea

Microsoft 365 e Office | Accesso | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

20 risposte

Ordina per: Più utili
  1. Anonimo
    2016-07-08T10:14:11+00:00

    ciao Andrea,

    prendo  spunto  dai link che ti ho suggerito, con qualche minima personalizzazione.

    modifica la tua form in questo modo,  modificando anche la tabella in modo  che il  controllo fullPath sia associato :

    inserisci i command button carica pdf che chiamerai cmdLoadPdfFile e mail! che chiamerai cmdInvioEmail.

    Ovviamente ulteriormente customizzabili.

    l'evento clicl del command button carica pdf ha questo codice :

    Private Sub cmdLoadPdfFile_Click()

    Me.FullPath = cmdFileDialog()

    End Sub

    quello dell'invio  email  questo invece :

    Private Sub cmdInvioEmail_Click()

    If Len(Me.Invio_Mail & vbNullString) = 0 Then

        VBA.MsgBox "indirizzo email non completato!", vbCritical, "Attenzione"

        Exit Sub

    End If

    If Len(Me.FullPath & vbNullString) = 0 Then

        VBA.MsgBox "allegato non presente!", vbCritical, "Attenzione"

        Exit Sub

    End If

    Dim strMessaggio As String

    Dim strSubject   As String

    strMessaggio = "Gentile " & Me.ID_Clienti.Column(1) & vbNewLine & _

                 " in allegato l'avviso di pagamento" & vbNewLine & _

                 " Distinti Saluti."

    strSubject = "Invio avviso al" & str(Time)

    CreateEmailWithOutlook Me.Invio_Mail, strSubject, strMessaggio, Me.FullPath

    End Sub

    inserisci questo in due moduli  standard :

    mod_invio email :

    Option Compare Database

    Option Explicit

    Private outLookIstance As Object 'Outlook.Application

    Public Function CreateEmailWithOutlook( _

        ByVal MessageTo As String, _

        ByVal Subject As String, _

        ByVal MessageBody As String, _

        ByVal strFile As String)

        ' Define app variable and get Outlook using the "New" keyword

        Dim olMailItem As Object ' Outlook.MailItem  ' An Outlook Mail item

        ' Create a new email object

        newOlIstance

        Set olMailItem = outLookIstance.CreateItem(0)

        ' Add the To/Subject/Body to the message and display the message

        With olMailItem

            .To = MessageTo

            .Subject = Subject

            .Body = MessageBody

            .Display    ' To show the email message to the user

            .Attachments.Add strFile

        End With

        ' Release all object variables

        Set olMailItem = Nothing

        Set outLookIstance = Nothing

    End Function

    Private Sub newOlIstance()

        On Error Resume Next

        Set outLookIstance = GetObject(, "Outlook.Application")

        If outLookIstance Is Nothing Then

            Set outLookIstance = CreateObject("Outlook.Application")

        End If

    End Sub

    mod_fileDialog :

    Option Compare Database

    Option Explicit

    Private Const strPathRete As String = "C:\prova"

    Public Function cmdFileDialog() As Variant

       Dim fDialog     As Object

       Dim varFile     As Variant

       Set fDialog = Application.FileDialog(3)

       With fDialog

          .Title = "Select One or More Files"

          .AllowMultiSelect = False

          .Filters.Clear

          .Filters.Add "files PDF", "*.pdf"

          .InitialFileName = CurrentProject.Path & ""

          If .Show = True Then

             varFile = .SelectedItems(1)

          Else

             varFile = Null

          End If

       End With

       cmdFileDialog = varFile

    End Function

    al click del command button cmdLoadPdfFile  sceglierai il file da allegare, a quello del cmdInvioEmail creerai l'email allegando il file scelto.

    ciao, Sandro.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2016-07-05T05:54:03+00:00

    ciao Andrea,

    la variabile Dim Attachment As Object se non utlizzata nella routine la toglierei*.*

    manca nel tuo codice l'object type suppongo tu debba inviare un report in PDF che si chiama attachment, e la gestione errori.

    prova in questo modo :

    Private Sub IndirizzoMail_Click()

    On Error GoTo errHandler

        Dim Messaggio As String

        Dim Mail As String

        Messaggio = "Bla bla bla. Cordiali saluti. Pinco Pallino"

        Mail = Me.mail

        DoCmd.SendObject acReport, "attachment", acFormatPDF, Mail, , , "Avviso", Messaggio, True

    err_handler:

         Exit Sub

    errHandler:

         With Err

             If .Number = 2501 Then

                     MsgBox "ok operatione annullata"

             Else

                 MsgBox "ERR#" & CStr(.Number) _

                     & vbNewLine & .Description, _

                      vbCritical

             End If

             Resume err_handler

         End With

    end sub

    ciao, Sandro.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  3. Anonimo
    2016-07-03T18:19:43+00:00

    ciao Andrea,

    controlla bene il metodo sendObject, vedi se questo esempio ti è maggiormente chiaro circa il passaggio dei parametri :

    DoCmd.SendObject ObjectType:=acReport, _

                       objectName:="Impiegati55", _

                       outputFormat:=acFormatPDF, _

                       To:=******@cioccio.it, _

                       CC:="", _

                       subject:="invio report", _

                       messageText:="prova", _

                       editMessage:=True

    io andrei però via automazione per evitare i messaggi di protezione, vedi qui :

    https://msdn.microsoft.com/en-us/library/office/ff197046.aspx?f=255&MSPPError=-2147217396

    e per la firma vedi qui :

    https://support.microsoft.com/en-us/kb/2544665

    http://www.rondebruin.nl/win/s1/outlook/signature.htm

    ciao, Sandro.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  4. Anonimo
    2016-07-05T06:40:43+00:00

    Grazie, buona la gestione dell'errore, ma non devo inviare un report di nome "attachment".

    Nella tabella che sta alla base della maschera esiste un campo di tipo "allegato" che serve ad inserire nel record la copia della fattura in Pdf.

    In fase di inserimento vengono inseriti il cliente, la data della fattura, il periodo di riferimento, l'importo e la copia della fattura stessa in Pdf, come allegato.

    Quando apro la maschera "inviomail" vorrei che, cliccando sull'indirizzo collegato al cliente selezionato, venisse generata la mail con allegata la copia della fattura in Pdf; il problema è che non so come definire l'oggetto da allegare.

    Grazie per la consueta pazienza e buona giornata.

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2016-07-04T13:14:13+00:00

    Grazie per le risposte.

    Riguardo al SendObject ho provato con l'automazione ma il problema è che non allega il file.

    In sostanza la maschera è composta dai seguenti campi:

    - "Cliente" (combo)

    •  "Data" (data)
    •  "Periodo" (combo)
    •  "Mail" (testo)
    • "fattura" (allegato formato Pdf).

    Cliccando su "mail" vorrei inviare all'indirizzo mail scelto la fattura allegata; con il codice indicato nella domanda funziona tutto ma non allega l'attachment.

    Grazie per le indicazioni sulla firma delle mail.

    Ciao

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento