Problema invio automatico email tramite Outlook

di il
2 risposte

Problema invio automatico email tramite Outlook

Buongiorno a tutti,

scusate ma non sono molto esperto in vba access per cui chiedo il vs aiuto per risolvere un problema nell'invio automatico delle mail.

In pratica ho scritto un codice (vedendo in rete e modificandolo a mio interesse) per l'invio delle mail e quasi tutto funziona perfettamente (il codice funziona bene).

Il problema è che con questo codice faccio aprire la schermata di outlook, già tutta compilata, e permetto all'utente di inviare la mail.

Io voglio invece che non appaia la schermata, ma che ma mail venga spedita immediatamente, escludendo quindi la possibilità all'utente di chiudere la schermata di outlook senza inviare la mail di richiesta.

questo è il codice che ho scritto e che funziona (compila tutti i campi e apre la schermata di outlook).

Come devo modificare il codice al fine di non avere un iperlink ad outlook ma invio diretto della mail?

Grazie mille,

Marco.

            Set rs0 = db1.OpenRecordset("SELECT ind_mail FROM list_ind_mail WHERE enab_mail = TRUE")
            If Not rs0.EOF Then
                cont = 0
                rs0.MoveFirst
                While Not (rs0.EOF)
                    If cont = 0 Then
                        maillist = "mailto:" & rs0!ind_mail
                    ElseIf cont = 1 Then
                        maillist = maillist & "?cc=" & rs0!ind_mail
                    Else
                        maillist = maillist & ";" & rs0!ind_mail
                    End If
                    cont = cont + 1
                    rs0.MoveNext
                Wend
                maillist = maillist + "&subject=New Request: " & PIPPO + "&body=Notification of MINNI"
                Application.FollowHyperlink maillist, , True
            End If

2 Risposte

  • Re: Problema invio automatico email tramite Outlook

    Per ovviare temporaneamente al problema ho scritto il codice seguente che ha un problema con la nuova versione di outlook.

    Ossia quando genera la mail apre outlook con la vecchia versione e questo, molte volte, impalla outlook, che è configurato per la nuova versione, con la conseguenza che la mail finisce nelle bozze in quanto non spedita.

    Quindi in pratica come devo scrivere il codice per inviare automaticamente una mail con sistema a 64 bit ed access 365 ed outlook configurato per "il nuovo outlook"?

    Grazie mille,

    MArco

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    With OutMail
    .to = email1
    .cc = email2
    .bcc = ""
    .Subject = "PIPPO: " & "MINNI"
    .HTMLBody = "PIPPO: " & "MINNI"
    .send
    End With
    
    Set OutMail = Nothing
    Set OutApp = Nothing
  • Re: Problema invio automatico email tramite Outlook

    Ciao,

    perchè non consulti la documentazione del supporto Microsoft ? 
    Per esempio puoi iniziare da qui : https://learn.microsoft.com/en-us/office/vba/outlook/concepts/getting-started/automating-outlook-from-a-visual-basic-application

    In generale, da qualche anno a questa parte, per inviare e-mail da VBA MsAccess nascono alcuni problemi e limitazioni legati alle protezioni dati di accesso peri i servizi email..

    I codici che si usavano nel passato difficilmente riesci a farli funzionare. 
    Esistono servizi alternativi a pagamento oppure free, quest'ultimi hanno alcune limitazioni come per esempio il numero di email da poter spedire al mese etc... ,
    Questi si occupano di gestire l'invio delle email in automatico, ma che utilizzerei solo se non avessi installato Office senza Outlook.

    Per esempio se hai installato Office e hai Outlook, puoi continuare gratuitamente e in modo robusto e protetto, a inviare in automatico le email dal Vba.
    Il servizio di Outlook che hai configurato si fa carico delle protezioni e quant'altro occorre a tal fine.

    Come da documentazione che ti ho fornito, con il Vba è sufficiente fare riferimento alla libreria di Office atta per creare gli oggetti che occorro in ambito Outlook e utilizzare i suoi metodi e proprietà come da questo Esempio che ti ho preparato in questo momento:

    ' SEND EMAIL
    Sub MySendEmail()
        ' Declare object
        Dim OutlookApp As Object
        Dim OutlookMail As Object
        Dim EmailSubject As String
        Dim EmailBody As String
        Dim EmailTo As String
        Dim EmailFrom As String
        Dim EmailCC As String
        Dim EmailBcc As String
        Dim EmailPriority As Integer
        Dim EmailRead As Boolean
        
        ' Create instance of Outlook
        On Error Resume Next
        Set OutlookApp = CreateObject("Outlook.Application")
        On Error GoTo 0
        ' Check is running
        If OutlookApp Is Nothing Then
            MsgBox "Error outlook is not is running", vbCritical
            Exit Sub
        End If
        
        ' Create new email item
        Set OutlookMail = OutlookApp.CreateItem(0)
        
        ' Set email From
        EmailFrom = "xxxxxxxx"
        ' Set email To
        EmailTo = "xxxxxxxxxx"
        
        ' Set email CC
        EmailCC = ""
        ' Set email BCC
        EmailBcc = ""
        
        ' Set priority (1 = normal, 2 = high, 0 = low)
        EmailPriority = 1
        ' Set read receipt (True = request, False = don't request)
        EmailRead = False
        
        ' Set email Subject
        EmailSubject = "New Email Obj my Test"
        ' Set email Body
        EmailBody = "New Message Body, my test Email"
        
        ' Set On error for the sending process
        On Error Resume Next
        ' Set email and send
        With OutlookMail
            .To = EmailTo
            If EmailCC <> "" Then .CC = EmailCC
            If EmailBcc <> "" Then .BCC = EmailBcc
            .Subject = EmailSubject
            .Body = EmailBody
            .Importance = EmailPriority
            .ReadReceiptRequested = EmailRead
            .Send
        End With
        
        ' Check error sending email process
        If Err.Number <> 0 Then
            MsgBox "Error sending email... " & Err.Description, vbCritical
        Else
            MsgBox "Email successfully sent", vbInformation
        End If
        ' Reset error
        On Error GoTo 0
        
        ' Close
        Set OutlookMail = Nothing
        Set OutlookApp = Nothing
    End Sub

    .
    Come vedrai ci sono quasi tutte le proprietà che puoi utilizzare e parametrizzare per il tuo uso specifico.
    Quindi dovrai semplicemente:

    • implementare i controlli e validazioni prima di eseguire l'invio dell'email
    • implementare le liste dei Destinatari e/o dei CC e/o dei BCC
    • parametrizzare il tipo di email da inviare :
      • la priorità
      • il ritorno del messaggio di avvenuta ricezione e lettura
    • implementare l'invio email con allegato con il metodo .Attachments.Add
    • etc..etc..

    .
    Ovviamente devi aver configurato in modo corretto il tuo Outlook con il suo/suoi User e Password di accesso. 
    A questo punto nella funzione che ti ho postato andrai a definire con quale User intendi inviare l'email. 
    Se funziona bene Outlook allora funzionerà anche l'invio tramite il Vba.

    • Per quantoriguarda l'applicazione Outlook:
      • non è necessario che sia aperto
      • Outlook si apre solo se viene impostato la proprietà Visibile nell'oggetto OutlookApp.Visible = True
      • puoi aprire Outlook per avere l'anteprima del messaggio prima di inviarlo:
        • sostituire il metodo .Send con il metodo .Display. Di conseguenza si cliccherà su INVIA per spedire l'email
      • etc... etc... etc...

    .
    Insomma gli argomenti sono tanti e non è possibile esporli  tutti per spiegarti tutte le possibilità offerte dal sistema. 
    Se apri la documentazione che ti ho fornito all'inizio del post, troverai tutti gli argomenti utili da approfondire su questo tema. 

    Quindi il consiglio che posso darti, se con l'Office hai installato anche OutLook, è di utilizzarlo.
    Risulta essere uno standard per l'applicazioni Office e mette a disposizione gli oggetti, metodi e proprietà sufficienti allo scopo.
    Questo può garantire nel tempo efficienza e funzionalità. (fino a quando Microsoft lo vorrà)  ;-)

    Adesso tocca a te, approfondire e studiare la documentazione che ti ho fornito e personalizzare l'esempio, sopra riportato, secondo i tuoi scenari/esigenze.

    Nota: ovviamente puoi inserire i parametri da passare a tale funzione in modo da poterla pilotare esternamente a proprio piacimento: 
    Per esempio tutti i valori del tipo:

    	Dim EmailSubject As String
        Dim EmailBody As String
        Dim EmailTo As String
        Dim EmailFrom As String
        Dim EmailCC As String
        Dim EmailBcc As String
        Dim EmailPriority As Integer
        Dim EmailRead As Boolean

    puoi impostarli e passarli come parametri ...per esempio:

    Sub MySendEmail(EmailSubject As String, EmailTo As String, EmailFrom As String, EmailCC As String, EmailPriority As Integer, EmailRead As Boolean)
        ' Declare object
        Dim OutlookApp As Object
        Dim OutlookMail As Object
        
        ' Create instance of Outlook
        On Error Resume Next
        Set OutlookApp = CreateObject("Outlook.Application")
        On Error GoTo 0
        ' Check is running
        If OutlookApp Is Nothing Then
            MsgBox "Error outlook is not is running", vbCritical
            Exit Sub
        End If
        
        ' Create new email item
        Set OutlookMail = OutlookApp.CreateItem(0)
    	....    
    	...
    	..
    	.
    End Sub

    Insomma, te devi da' da fa'... mo' te tocca.  ;-)

Devi accedere o registrarti per scrivere nel forum
2 risposte