Problema invio automatico email tramite Outlook

di il
7 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

7 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 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 OutlookAccount As Object
    	' Declare variables
        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
        Dim FileAttachment As String
        Dim AccountFound 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 = "xxxxxxxxx"
        ' 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"
        
        ' Full path file attachment
        FileAttachment = "c:\FileAttachment\DocPdf.pdf"
        
        ' Set sending account
        AccountFound = False
        For Each OutlookAccount In OutlookApp.Session.Accounts
            If OutlookAccount.SmtpAddress = EmailFrom Then
                OutlookMail.SendUsingAccount = OutlookAccount
                AccountFound = True
                Exit For
            End If
        Next
        ' Check if account not found
        If Not AccountFound Then
            MsgBox "Error account '" & EmailFrom & "' is not found in Outlook.", vbCritical
            Exit Sub
        End If
        
        ' 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
            If FileAttachment <> "" Then .Attachments.Add FileAttachment
            .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 il controllo dell' account di Outlook da utilizzare come mittente 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 quanto riguarda 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
        Dim FileAttachment As String

    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, FileAttachment As String)
        ' 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 studià perchè il sistema funziona bene ed è molto semplice.  ;-)

  • Re: Problema invio automatico email tramite Outlook

    22/02/2025 - zymarco ha scritto:

    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"?

    Verifica nei Riferimenti la libreria referenziata per Office.

    • in VBA Access per il 365 dovresti avere referenziato la 16.x Outlook 2016/2019/Office 365
    • verifica Outlook 365 se è quello predefinito
      • apri Outlook 365 e in opzioni devi abilitare il nuovo Outlook al posto di quello vecchio
    • controlla in Outlook 365 in opzioni\avanzate se è abilitato per "Invia immediatamente quando connesso"
      • questo potrebbe essere la causa per il fatto che l'email finiscono nella cartella Bozze 

    .
    Intanto verifica quanto sopra riportato e poi vediamo se è necessario forzare da codice la versione Outlook da utilizzare.

    Nota. come detto nel precedente post, ti devi assicurare che Outlook sia configurato correttamente. 

  • Re: Problema invio automatico email tramite Outlook

    Suggerirei di non sviluppare con MSO, in quanto già dalla nuova prossima versione essendo una WEB application non esporrà più l'interfaccia COM rendendolo impossibile da far parlare con il VBA che peraltro non sarà nemmeno supportato.

    Quel codice purtroppo è già scaduto.

  • Re: Problema invio automatico email tramite Outlook

    23/02/2025 - @Alex ha scritto:

    Quel codice purtroppo è già scaduto.

    .... quindi non era solo un sospetto quanto avevo detto ....

     (fino a quando Microsoft lo vorrà)  ;-)

    Ciao @Alex, buongiorno

    https://learn.microsoft.com/en-us/microsoft-365-apps/outlook/get-started/state-of-com-add-ins
    https://learn.microsoft.com/en-us/microsoft-365-apps/outlook/get-started/migrate-com-to-web-addins

    quindi a questo  punto arriveranno solo soluzioni a pagamento (come il 365) oppure di terze parti sempre a pagamento o con limitazioni ?

    altre domande se posso:

    ci dobbiamo anche aspettare che i provider smetteranno di dare servizi di accesso come SMTP ?

    e vorranno portarci tutti verso i servizi cloud ?  (e a pagamento)

    quindi alla fine non ci saranno più e-mail gratuite ? (alla GMail per intendersi)

    Secondo te @Alex cosa fare a questo punto ?

    Insomma, già oggi con le "autenticazioni" che alla fine verranno rilasciate come servizi a pagamento, oppure SMTP già inutilizzabile perchè o ti dirottano l'e-mail nella cartella Spam o peggio smetteranno di dare tale servizio...  alla fine cosa fare ?

  • Re: Problema invio automatico email tramite Outlook

    Ciao Franco, non saprei cosa suggerire, non ho questo problema, leggo tuttavia che BLAT pare ancora uno strumento funzionale, purtroppo i problemi di cui parli esistono, e dovranno essere considerati, non so se creeranno qualche AddIns per fruire di qualche servizio, anche a pagamento, a livello professionale direi che usare prodotti gratuiti è sempre un po rischioso per l'assistenza, la sicurezza ed in alcuni casi la certificabilità alla Cyber... 

  • Re: Problema invio automatico email tramite Outlook

    Ciao @Alex, 

    concordo che a livello professionale ti affidi al provider, per l'assistenza, evoluzione tecnologica e quant'altro, soprattutto per l'aspetto sicurezza dove i costi non devono rappresentare un problema. (costerebbe molto più un fai da te per svariati motivi... o soluzioni free per niente raccomandabili)

    Una volta era tutto  molto più semplice, meno costi, meno attacchi dove una buona protezione locale era sufficiente, etc. etc... bastava avere un Office Professional e integravi il tutto con pochi sforzi. 

    Oggi per gli aspetti che dicevi tu, è veramente impossibile e sconsigliabile. E i servizi Cloud la fanno da padroni sempre di più.

Devi accedere o registrarti per scrivere nel forum
7 risposte