Invio di mail

di il
6 risposte

Invio di mail

Buonasera a tutti voi. Ho bisogno di un vostro aiuto. Ho questo codice, che dovrebbe provvedere ad inviare una mail :

Imports System.Net
Imports System.Net.Mail
Public Class email2
    Dim ServerSmtp As New SmtpClient
    Dim myEmail As New MailMessage
    Dim myConnessione As Boolean
    Private Sub email2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        myConnessione = My.Computer.Network.IsAvailable
        If myConnessione = False Then
            MsgBox("Manca la connessione ad internet")
            Exit Sub
        End If
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            With ServerSmtp
                .Credentials = New Net.NetworkCredential("*****@gmail.com", "*********")
                .EnableSsl = True
                .Port = 587     '465
                .Host = "smtp.gmail.com"
            End With
            
            With myEmail
                .From = New MailAddress("******@gmail.com")
                .To.Add(toMsg.Text)
                .Subject = oggettoMsg.Text
                .IsBodyHtml = False
                .Body = bodyMsg.Text
            End With

            ServerSmtp.Send(myEmail)
            MsgBox("email spedita")
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Class

Il codice non funziona. Mi restituisce due errori diversi a seconda della porta che uso : 

con la porta 587 di restituisce (mail e passwoard sono certe,le ho controllate e ricontrollate cento volte!): 

con la porta 465 :

Certamente sto sbagliando qualcosa. Ho provato anche con MSN (con il relativi parametri) : stessi risultati!

Grazie

6 Risposte

  • Re: Invio di mail

    Probabilmente il problema ha a che fare con le regole di sicurezza di Google. C'è una procedura un po' particolare per autorizzare le app ad inivare e ricevere e-mail. Prova a guardare questo thread: https://www.iprogrammatori.it/forum-programmazione/vbnet/inviare-mail-con-2010-anche-con-nuove-sicurezze-google-t49868.html

  • Re: Invio di mail

    Philcattivocarattere, grazie.

    Ho letto quanto mi hai suggerito. Ti informo che sebbene abbia seguito la procedura passo passo, la voce “Password per le APP” non è più presente. Inoltre -come già segnalato in precedenza- ho usato anche il provider MSN ,ma ho ottenuto lo stesso risultato negativo.

    Il mio VS 2019 è aggiornato al framwork 4.8.

  • Re: Invio di mail

    La cosa e' un po' arzigogolata. Avevo lo stesso problema con Python, appena risolto.

    1. DEVI abilitare l'autenticazione a DUE fattori su GMail
    2. DEVI create una "App Password", operazione disponibilie SOLO se l'autenticazione a due fattori e' stata abilitata, altrimenti, NISBA
    3. usi la password cosi' creata come “password” al posto di quella che usi per accedere a GMail

    .

    https://www.getmailbird.com/gmail-app-password/

    Poi, funziona

    import smtplib
    from email.mime.text import MIMEText
    
    subject = "Email Subject"
    body = "This is the body of  the text message"
    sender = "ciccio.pasticcio[at]gmail.com"
    recipients = ["pinco.pallino[at]gmail.com"]
    password = "aaaa bbbb cccc dddd" 	# OVVIAMENTE devi usare quella che generi TU
    
    
    def send_email(subject, body, sender, recipients, password):
        msg = MIMEText(body)
        msg['Subject'] = subject
        msg['From'] = sender
        msg['To'] = ', '.join(recipients)
        with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
           smtp_server.login(sender, password)
           smtp_server.sendmail(sender, recipients, msg.as_string())
        print("Message sent!")
    
    
    ret = send_email(subject, body, sender, recipients, password)
    print(ret)
    
    
  • Re: Invio di mail

    01/09/2024 - migliorabile ha scritto:


    La cosa e' un po' arzigogolata. Avevo lo stesso problema con Python, appena risolto.

    1. DEVI abilitare l'autenticazione a DUE fattori su GMail
    2. DEVI create una "App Password", operazione disponibilie SOLO se l'autenticazione a due fattori e' stata abilitata, altrimenti, NISBA
    3. usi la password cosi' creata come “password” al posto di quella che usi per accedere a GMail

    .

    https://www.getmailbird.com/gmail-app-password/

    Grazie mille,migliorabile. Sono riuscito a spedire la mail. Questa è quindi la soluzione corretta per gmail, ma lo stesso problema si verifica anche con MSN.

    Sei così cortese da darci una “dritta” per provider non google. Grazie. 

  • Re: Invio di mail

    Un aggiornamento sul tema : ho scoperto (io solo oggi!) che anche Microsoft (msn,live,office365,ecc.) adoperano il sistema di protezione a due passaggi e generano,come google,una password per i “dispositivi” (come X-Box) che non supportano i due passaggi.  (Come ottenere e usare le password delle app - Supporto tecnico Microsoft) .

    Ho fatto più tentativi, ma l'errore smpt si conferma : il client non è autorizzato ad accedere alla mail.

  • Re: Invio di mail

    Ho dedicato la mattinata a fare tentativi per inviare tramite app vb net un messaggio da un account msn (con google il problema è stata superato grazie a migliorabile e a philcattivocarattere) con protezione a due passaggi (le cui modalità sono indicate nel seguente link :( https://support.microsoft.com/en-us/account-billing/how-to-get-and-use-app-passwords-5896ed9b-4263-e681-128a-a6f2979a7944

    Il problema nasceva da una errata informazione fornita più di una pagina web sul nome del server smtp di msn e sulla relativa porta.

    Ecco il codice usato nel caso possa risultare utile a qualcuno:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim connessione As Boolean = My.Computer.Network.IsAvailable
            If connessione = False Then
                MsgBox("Connessione assente")
                Exit Sub
            End If
    
            Try
                'GMAIL
                'smtpClient.Host = "smtp.gmail.com"
                'SMTP port(SSL):  465
    
                'LIVE
                'smtpClient.Host = "smtp.live.com"
                'smtpClient.Port = 25
    
                'OFFICE
                'smtpClient.Host = "smtp.office365.com"
                'smtpClient.Port = 587
    
                Dim smtpClient As New SmtpClient
                With smtpClient
                    .Host = "smtp-mail.outlook.com"
                    .Port = 587
                    .Credentials = New NetworkCredential("*****@msn.com", "edaqfciomlxqytqo")
                    .EnableSsl = True
                End With
    
                Dim MailMessage As New MailMessage()
                With MailMessage
                    .From = New MailAddress("******@msn.com")
                    .To.Add(fromMsg.Text)
                    .Subject = oggettoMsg.Text
                    .IsBodyHtml = False
                    .Body = bodyMsg.Text
                End With
    
                smtpClient.Send(MailMessage)
                MsgBox("Email spedita")
            Catch ex As SmtpException
                MsgBox("Errore SMTP: " & ex.Message)
            Catch ex As Exception
                MsgBox("Errore: " & ex.Message)
            End Try
        End Sub
Devi accedere o registrarti per scrivere nel forum
6 risposte