Invio mail cdo .net 6

di il
16 risposte

Invio mail cdo .net 6

Buona sera …

ho un problema da un paio di giorni in quanto sto cercando di creare uno script da visual studio in .net 6 per l invio di mail con cdo di microsoft

Const cdoSendUsingPort = 2
       'Do authenticate
       Const cdoAuth = 1
       'SMTP server name
       Const SMTPServer = "smtp.office365.com"
       'SMTP Port
       Const SMTPPort = 25
       'Gmail User name
       Const GmailUser = "xxxxx-ot-xxxx@mail"
       'Gmail password
       Const GmailPassword = "yyyyyyy!"

       'Sending mail
       Dim objEmail = CreateObject("CDO.Message")
      9999 Dim objConf = objEmail.Configuration
       Dim objFlds = objConf.Fields
       With objEmail
           '---------------------------------------------------------------------
           ' Gmail SMTP server details
           .item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoAuth
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPPort
           .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = GmailUser
           .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = GmailPassword
           .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
           .Update
           '---------------------------------------------------------------------
       End With

       objEmail.To = "mail"
       objEmail.From = "mail"
       objEmail.Subject = "mailSubject"
       objEmail.TextBody = "mailBody"
      
       objEmail.Send

       'objFlds = Nothing
       ' objConf = Nothing
       objEmail = Nothing

Nonostante la compilazione non rilevi problemi nel momento in cui clicco sul tasto per lanciare la mail mi compare questo messaggio sulla riga 9999 :

System.MissingMemberException: 'Public member 'Configuration' on type 'IMessage' not found.'

Non capisco come sia possibile visto che la compilazione va a buon fine

Riferimenti scaricati nel progetto:

Interop.CDO

Interop.DAO

Interop.ADODB

Potete aiutarmi?

16 Risposte

  • Re: Invio mail cdo .net 6

    Formatta il codice nel forum prima di postarlo.

    E non è uno "script in visual studio" ma codice in vb.net.

    Se usi la CreateObject tutto avviene dinamicamentee gli errori li hai al momento dell'esecuzione. Ma mi chiedo perchè usi la CreateObject dato che hai inserito il riferimento a CDO?  

  • Re: Invio mail cdo .net 6

    Nella riga

    Dim objEmail = CreateObject("CDO.Message")

    non hai dichiarato di che tipo è la variabile objEmail per cui il compilatore gli assegna un tipo “object”, che è generico, e in fase di compilazione il compilatore non ha idea se funzionerà o no, e quindi è normale che non ti dia errore (tecnica chiamata late binding)

    Non conosco CDO e non ho idea di che tipo di variabile si tratta, ma prova a cambiarla in:

    Dim objEmail As IMessage = CreateObject("CDO.Message")

    adesso alla riga 9999 dovresti già vedere l'errore.

    Se digiti “objEmail” e poi premi il punto dovresti già vedere la lista delle proprietà e i metodi associati all'oggetto, probabilmente non c'è “Configuration” (guarda bene che per caso invece di Configuration non sia "IConfiguration")

    Su internet ho trovato anche questo:

    Dim objEmail = New CDO.Message()
  • Re: Invio mail cdo .net 6

    Grazie per le risposte..

    se metto Dim objEmail As IMessage = CreateObject("CDO.Message") mi dice che “il tipo Imessage non è definito”

    se invece metto Dim objEmail = New CDO.Message() mi dice che “item non è un membro definito di Message”

    21/01/2024 - SirJo ha scritto:


    Grazie per le risposte..

    se metto Dim objEmail As IMessage = CreateObject("CDO.Message") mi dice che “il tipo Imessage non è definito”

    se invece metto Dim objEmail = New CDO.Message() mi dice che “item non è un membro definito di Message”

  • Re: Invio mail cdo .net 6

    21/01/2024 - oregon ha scritto:


    Formatta il codice nel forum prima di postarlo.

    E non è uno "script in visual studio" ma codice in vb.net.

    Se usi la CreateObject tutto avviene dinamicamentee gli errori li hai al momento dell'esecuzione. Ma mi chiedo perchè usi la CreateObject dato che hai inserito il riferimento a CDO?  

    Scusami ma non sono un programmatore esperto non saprei come fare

    Sto andando a tentativi..io utilizzo msaccess in ufficio e invio mail da quel codice CDO msaccess ma l'ICT mi ha detto che non vuole piu vedere Access in azienda e quindi sto prevando con un .exe creato in visua studio

  • Re: Invio mail cdo .net 6

    Ho modificato  utilizzando Dim objEmail = New CDO.Message() ma mi dice che :
    Errore    BC30057    Il numero di argomenti per 'ReadOnly Default Property Fields As Fields' è eccessivo.  

    per tutte le righe .configuration

     Dim objEmail = New CDO.Message()
           'Sending mail
           'Dim objEmail = CreateObject("CDO.Message")
           'Dim objConf = objEmail.Configuration
           'Dim objFlds = objConf.Fields
           With objEmail
               '---------------------------------------------------------------------
               ' Gmail SMTP server details
               .Configuration("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
               .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
               .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoAuth
               .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPPort
               .Configuration("http://schemas.microsoft.com/cdo/configuration/sendusername") = GmailUser
               .Configuration("http://schemas.microsoft.com/cdo/configuration/sendpassword") = GmailPassword
               .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
               .Update
               '---------------------------------------------------------------------
           End With

  • Re: Invio mail cdo .net 6

    Vuoi formattare il codice che posti che si legge male??

    Dovrebbe essere

    With objEmail.Configuration.Fields
    …
    Item("….")=…
  • Re: Invio mail cdo .net 6

    21/01/2024 - oregon ha scritto:


    Vuoi formattare il codice che posti che si legge male??

    Non capisco come si fa..intendi così?

    Dim objEmail = New CDO.Message()
           
           With objEmail
               
               .Configuration("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
               .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
               .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoAuth
               .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPPort
               .Configuration("http://schemas.microsoft.com/cdo/configuration/sendusername") = GmailUser
               .Configuration("http://schemas.microsoft.com/cdo/configuration/sendpassword") = GmailPassword
               .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
               .Update
              
           End With

  • Re: Invio mail cdo .net 6

    Ma c'è un motivo valido per usare CDO ?
    visto che stai scrivendo in VB.NET, perchè non usi la libreria System.Net.Mail ??

    quello che vuole dirti Oregon è che quando pubblichi del codice qui sul forum, devi cliccare sull'icona che c'è nel editor, la quarta a partire da sinistra (c'è prima la “B”, poi la “I”, poi la “U” e poi quella che devi cliccare) e mettere il tuo codice dentro alla finestrella che appare

  • Re: Invio mail cdo .net 6

    Devi usare il tasto <> dell'editor per il codice

    Concordo perché non usi il namespace system.net.mail? Se non lo conosci lo studi un poco prima (senza fare copia incolla senza capire) e risolvi. In ogni caso 

    dovrebbe essere

    With objEmail.Configuration.Fields
    …
    Item("….")=…
  • Re: Invio mail cdo .net 6

     Dim objEmail = New CDO.Message()
            With objEmail.Configuration.Fields
                'Sending mail
                'Dim objEmail = CreateObject("CDO.Message")
                'Dim objConf = objEmail.Configuration
                'Dim objFlds = objConf.Fields
                'With objEmail
                '---------------------------------------------------------------------
                ' Gmail SMTP server details
                .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
                .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPServer
                .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoAuth
                .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPPort
                .Configuration("http://schemas.microsoft.com/cdo/configuration/sendusername") = GmailUser
                .Configuration("http://schemas.microsoft.com/cdo/configuration/sendpassword") = GmailPassword
                .Configuration("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
                .Update
                '---------------------------------------------------------------------
            End With
    
            objEmail.To = "mail"
            objEmail.From = "mail"
            objEmail.Subject = "mailSubject"
            objEmail.TextBody = "mailBody"
            ' objEmail.AddAttachment "C:\Users\admin\Desktop\Neues Textdokument.txt"      'Enter Attatchement here
            objEmail.Send
    
    Non appena inserisco ITEM (prima riga) mi dice che la proprietà item è readonly

    21/01/2024 - SirJo ha scritto:


    Ma c'è un motivo valido per usare CDO ?
    visto che stai scrivendo in VB.NET, perchè non usi la libreria System.Net.Mail ??

    quello che vuole dirti Oregon è che quando pubblichi del codice qui sul forum, devi cliccare sull'icona che c'è nel editor, la quarta a partire da sinistra (c'è prima la “B”, poi la “I”, poi la “U” e poi quella che devi cliccare) e mettere il tuo codice dentro alla finestrella che appare

    MAgariiiii…vorrei imparare tutto….uso cdo perche in access fino a ieri ho usato quello ma tutto cio' che può migliorare la mia applicazione ben venga…avete qualche pezzo di codice da iniziare a studiare?

  • Re: Invio mail cdo .net 6

    No niente pezzi di codice che troveresti ovunque. 

    Cerca e studia system.net.mail 

  • Re: Invio mail cdo .net 6

    21/01/2024 - Sparvy ha scritto:


    system.net.mail

    Ok grazie dell'incitamento ma siccome sono agli inizi puoi dirmi perchè se faccio una ricerca con system.net.mail mi compare tutto codice c# ?

    A me servirebbe vb.net? o qualcosa più vicina alle mie conoscenze ancora scarse

    Nel senso….usando visual studio che tipo di progetto dovrei aprire? DI solito uso visual basic e windows form

    Perdonate l'ignoranza

  • Re: Invio mail cdo .net 6

    Certo che comprendo il fatto che tu non conosca le basi ma qui non c'entra il “perdono”. 

    La programmazione (con relativa scritttura di codice funzionante) non è una attività che si fa senza uno studio preventivo e non esiste metodo “magico” che ti permetta di scrivere codice senza avere le minime conoscenze indispensabili. Non ci posso fare nulla.

    A meno di non copiare e incollare senza capirne nulla e non sono d'accordo su questo tipo di metodologia. Anche un programma C# usa il framework e il codice che trovi è comprensibile e facilmente portabile in VB.NET, la parte importante è usare le classi del Framework che sono comuni.

    Comunque ho cercato VB.NET System.Net.Mail e ho trovato, ad esempio, queste pagine

    https://www.morpheusweb.it/manuali/vbnet/manuale-vbnet-email.html

    Si tratta comunque di leggere, studiare, provare …

  • Re: Invio mail cdo .net 6

    Vai qua https://learn.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=net-8.0#remarks in alto a destra troverai una freccia verso il basso e di fianco il linguaggio selezionato credo che il default sia sempre c# ma se clicchi sulla freccietta puoi selezionare vb.net 

Devi accedere o registrarti per scrivere nel forum
16 risposte