Invio email ad un server SMTP

di il
14 risposte

Invio email ad un server SMTP

Buona sera a tutti voi, volevo sapere se ci sono i presupposti per avviare questa discussione. Come indicato nell'argomento ho la necessità tramite una macro azionata da un bottone di inviare una mail con solo testo ad una casella di posta che si trova su un mail server esterno. Quindi non devo aprire outlook, mi basta che venga solo inviata. Ho visto molti esempi di codice vba, che funzionano sempre attivando Outlook. Si potrebbe fare senza? solo con indirizzo email, nome server smtp e numero porta ?

Resto in attesa di commenti.

Per adesso vi ringrazio anche solo per la lettura.

Cassiopea

14 Risposte

  • Re: Invio email ad un server SMTP

    Puoi usare il server SMTP che usi tu per mandare mail, con il tuo account di posta.

    Ovviamente non si tratta di inviare mail anonimr

  • Re: Invio email ad un server SMTP

    Ciao, 

    di sistemi ce ne sono alcuni e sempre negli anni si sono utilizzati e scritti codici in merito.

    Ricordo che si usava la libreria Microsoft CDO del tipo :

    Dim mymail As New CDO.Message
    Dim objConfig As New CDO.Configuration
    
    Const cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing"
    Const cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver"
    Const cdoSMTPServerPort = "http://schemas.microsoft.com/cdo/configuration/smtpserverport"
    Const cdoSMTPConnectionTimeout = "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"
    Const cdoSMTPAuthenticate = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"
    Const cdoBasic = 1
    Const cdoSendUserName = "http://schemas.microsoft.com/cdo/configuration/sendusername"
    Const cdoSendPassword = "http://schemas.microsoft.com/cdo/configuration/sendpassword"
    

    Ricordo che si usava Mapi Outlook del tipo : 

    ' Create the Outlook session.
    Set objSession = CreateObject("Outlook.Application")
    objSession.Session.Logon .......
    
    ' Create the message.
    Set objMsg = objSession.CreateItem(olMailItem)
    With objMsg
    ....
    ...
    ..
    .

    Insomma …. il mio personale consiglio è quello di usare strumenti standard e se usi Office è bene appoggiarsi alle sue librerie per una manutenzione futura del progetto semplice e sempre affidabile nel tempo in quanto troverai sempre, anche se aggiornate, le librerie Microsoft Outlook.

    ….tutto da valutare sulla base delle proprie esigenze.

    ;-)

  • Re: Invio email ad un server SMTP

    13/10/2023 - oregon ha scritto:


    Puoi usare il server SMTP che usi tu per mandare mail, con il tuo account di posta.

    Ovviamente non si tratta di inviare mail anonimr

    una cosa di questo tipo Oregon ?  
    Esempio:

    Sub SendEmail()
        Dim CDOConfig As Object
        Dim CDOEmail As Object
        Dim SMTPServer As String
        Dim EmailSubject As String
        Dim EmailFrom As String
        Dim EmailTo As String
        Dim EmailCc As String
        Dim EmailBcc As String
        Dim EmailBody As String
        
        ' SMTP
        SMTPServer = "smtp.xxxxxxxxxxxxxxxxxxxxxx.com" 
        ' MAIL 
        EmailFrom = "xxxxEmail"
        EmailTo = "xxxxEmail"
        EmailSubject = "Oggettoxxxxx"
        EmailBody = "Corpoxxxxxx"
        ' CDO
        Set CDOConfig = CreateObject("CDO.Configuration")
        Set CDOEmail = CreateObject("CDO.Message")
        ' SMTP
        CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
        CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
        ' Usr Psw
        CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "username"
        CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
        ' SSL
        CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        ' Update
        CDOConfig.Fields.Update
        
        ' Message
        With CDOEmail
            Set .Configuration = CDOConfig
            .Subject = EmailSubject
            .From = EmailFrom
            .To = EmailTo
            .TextBody = EmailBody
            '.CC = EmailCc 
            '.BCC = EmailBcc
            '.AddAttachment "xxxx"
            ' send mail
            .Send
        End With
        
        ' Clear
        Set CDOEmail = Nothing
        Set CDOConfig = Nothing
    End Sub
  • Re: Invio email ad un server SMTP

    Salve Oregon e By65Franco, vi ringrazio per le risposte che mi danno speranza e conferma che cio si puo fare. Preparo un file sul mio pc , sperando di non fare casini, e faccio un test e vi aggiorno a breve…

    Casiopea

  • Re: Invio email ad un server SMTP

    13/10/2023 - Cassiopea ha scritto:


    Ho visto molti esempi di codice vba, che funzionano sempre attivando Outlook. Si potrebbe fare senza? solo con indirizzo email, nome server smtp e numero porta ?

    In alternativa - anche se onestamente non so quanto sia fattibile in VBA - si potrebbero inviare richieste via HTTP a servizi preposti all'invio di e-mail, tipo SendGrid, che senz'altro sono più indicati, funzionali e performanti rispetto all'uso degli ormai vetusti server SMTP.

    Aggiungo, non perché il protocollo SMTP sia da considerare inadeguato in sé, ma un conto è dover inviare qualche messaggio di posta elettronica personale da un client tradizionale, un altro è quello di dover garantire la spedizione di numerosi messaggi (con tracciabilità, monitoring, clustering, ecc.) a molteplici destinatari, laddove il contenuto del messaggio veicolato ha una certa importanza e pertanto l'intero processo di invio deve aver un certo grado di affidabilità.

  • Re: Invio email ad un server SMTP

    14/10/2023 - Alka ha scritto:


    Aggiungo, non perché il protocollo SMTP sia da considerare inadeguato in sé, ma un conto è dover inviare qualche messaggio di posta elettronica personale da un client tradizionale, un altro è quello di dover garantire la spedizione di numerosi messaggi (con tracciabilità, monitoring, clustering, ecc.) a molteplici destinatari, laddove il contenuto del messaggio veicolato ha una certa importanza e pertanto l'intero processo di invio deve aver un certo grado di affidabilità.

    Ciao Alka,

    una domanda: per i requisiti che hai citato, ottini lo stesso utilizzando mapi outlook ? 

    Grazie ;-)

  • Re: Invio email ad un server SMTP

    14/10/2023 - By65Franco ha scritto:


    una domanda: per i requisiti che hai citato, ottini lo stesso utilizzando mapi outlook ? 

    Decisamente no: i requisiti che ho citato sono qualcosa di intrinsecamente legato ai sistemi cloud.

    L'interfaccia MAPI di Outlook serve solo ad automatizzare la creazione di invio messaggi facendo fare alla macchina ciò che sostanzialmente faresti a mano. Si tratta appunto di automazione. Tutto il resto - alta affidabilità, disponibilità, ridondanza, tracking, monitoraggio, storage, ecc. - sono invece appannaggio di un intero sistema software, realizzato con microservizi, che sfrutta il cloud per queste finalità.

  • Re: Invio email ad un server SMTP

    14/10/2023 - Alka ha scritto:


    14/10/2023 - By65Franco ha scritto:


    una domanda: per i requisiti che hai citato, ottini lo stesso utilizzando mapi outlook ? 

    Decisamente no: i requisiti che ho citato sono qualcosa di intrinsecamente legato ai sistemi cloud.

    L'interfaccia MAPI di Outlook serve solo ad automatizzare la creazione di invio messaggi facendo fare alla macchina ciò che sostanzialmente faresti a mano. Si tratta appunto di automazione. Tutto il resto - alta affidabilità, disponibilità, ridondanza, tracking, monitoraggio, storage, ecc. - sono invece appannaggio di un intero sistema software, realizzato con microservizi, che sfrutta il cloud per queste finalità.

    ok, capito…. grazie per info ;-)

  • Re: Invio email ad un server SMTP

    Allora la macro funziona perfettamente!!!! Per me basterebbe anche cosi, ma ho notato che quando si esegue non si hanno riscontri che la mail sia partita o meglio se ci sono errori si (infatti avevo sbagliato il server…). Ma sarebbe perfetto se apparisse un popup “ EMAIL INVIATA ”

    Se prima di End inserisco MsgBox “ EMAIL INVIATA ! ”     rischio di bloccare tutto?

    Grazie a tutti voi per il supporto

  • Re: Invio email ad un server SMTP

    14/10/2023 - Cassiopea ha scritto:


    ho notato che quando si esegue non si hanno riscontri che la mail sia partita o meglio se ci sono errori si (infatti avevo sbagliato il server…)

    Ricorda anche che usando un server SMTP avrai diverse limitazioni; ad esempio

    • se il destinatario della mail non è gestito direttamente dal server SMTP (ovvero se stai spedendo con il server di Libero - ad esempio - a una casella che non è su Libero, sfruttando quindi il relay), non ottieni alcun errore salvo una mail di risposta all'indirizzo del mittente o a quello indicato per la ricezione delle risposte;
    • il relay non è sempre consentito da tutti i server SMTP;
    • il numero di destinatari contemporanei per il singolo messaggio potrebbe essere limitato e variabile (a seconda del provider), così come lo è la quantità di messaggi che puoi inviare per sessione (se sono pochi non è un problema) e così via.

    Tieni conto di questi fattori quando “pubblicizzi” la tua feature al cliente, poiché vi sono cose che non puoi garantire.

    Certo, se non sono rilevanti, sei a posto così. :)

  • Re: Invio email ad un server SMTP

    14/10/2023 - Cassiopea ha scritto:


    Se prima di End inserisco MsgBox “ EMAIL INVIATA ! ”     rischio di bloccare tutto?

    Un messaggio di fine elaborazione lo puoi mettere prima di End Sub , quindi quando gli oggetti sono chiusi e liberati dalla memoria.

  • Re: Invio email ad un server SMTP

    Si By65Franco ho fatto cosi, tutto funziona. Grazie ancora

    Adesso posso andare avanti ad implementare il file con altre funzioni…..

  • Re: Invio email ad un server SMTP

    Bns volevo chiedere se è possibile inserire il testo della mail prendendolo da una cella del foglio. Ho provato ad utilizzare l'istruzione 
    Range ("a1").select ma non funziona.....
    Vba lo permette?
    Grazie
    
    Saluti
    Cassiopea
    
    
    
    
    
    ' SMTP
        SMTPServer = "smtp.xxxxxxxxxxxxxxxxxxxxxx.com" 
        ' MAIL 
        EmailFrom = "xxxxEmail"
        EmailTo = "xxxxEmail"
        EmailSubject = "Oggettoxxxxx"
        EmailBody = "Corpoxxxxxx"
  • Re: Invio email ad un server SMTP

    Ciao,

    si che lo puoi fare … se il testo da inviare si trova sempre nella stessa cella, puoi semplicemente reperirlo con:

    EmailBody = Range("A1").Value

    Eventualmente, se occorre, seleziona il foglio di lavoro:

    Dim foglio As Worksheet
    Set foglio = ThisWorkbook.Sheets("NomeFoglio")
    EmailBody = foglio.Range("A1").Value

    Per metterlo un poco meglio, sarebbe il caso di fare una cosa del tipo:

    Dim foglio As Worksheet
    Dim strEmailBody As String
    
    Set foglio = ThisWorkbook.Sheets("NomeFoglio")
    strEmailBody = foglio.Range("A1").Value
    
    
    EmailBody = strEmailBody
    
Devi accedere o registrarti per scrivere nel forum
14 risposte