Envoyer un e-mail à l'aide de Gmail génère une erreur d'expiration

Nous testons du code pour envoyer des messages électroniques à l'aide de Gmail à partir d'un formulaire, mais nous obtenons une erreur d'expiration.

Pouvez-vous nous dire ce qui manque à ce code pour que le message électronique soit envoyé?

    Try
        Dim SmtpServer As New SmtpClient()
        Dim mail As New MailMessage()

        SmtpServer.EnableSsl = True
        SmtpServer.Credentials = New Net.NetworkCredential("[email protected]", "MyPasswordGoesHere")
        SmtpServer.Port = 465
        SmtpServer.Host = "smtp.gmail.com"

        mail.From = New MailAddress("[email protected]")
        mail.To.Add("[email protected]")
        mail.Subject = "Test Mail"
        mail.Body = "This is for testing SMTP mail from GMAIL"

        SmtpServer.Send(mail)

        MsgBox("mail sent")

    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

Mettre à jour: Changement de code en utilisant MailBee. C'est ainsi que nous faisons des emails à tous les clients:

    Dim strSqlStatement As String = "Select CustomerName, Email " & _
                               "From Customers " & _
                              "Where Email Is Not Null"
    If IsConnected() Then

        ' Set up the sql command and lookup the parent.
        '----------------------------------------------
        Using objSqlCommand As SqlCommand = New SqlCommand(strSqlStatement, ObjConnection)

            With objSqlCommand

                ' Open the SqlConnection before executing the query.
                '---------------------------------------------------
                Cursor = Cursors.WaitCursor

                ObjConnection.Open()

                Dim objDataReader As SqlDataReader = .ExecuteReader()

                ' Go through all the customers and send out the promotion emails.
                '----------------------------------------------------------------
                If objDataReader.HasRows Then

                    MailBee.Global.LicenseKey = "My license key goes here."

                    Dim objSMTP As New Smtp
                    Dim server As New SmtpServer(TextBoxSMTPServer.Text, TextBoxUserName.Text, TextBoxPassword.Text)

                    'SmtpServer.Host = TextBoxSMTPServer.Text
                    'SmtpServer.Port = TextBoxPort.Text
                    'SmtpServer.Timeout = 100

                    'If TextBoxUseSSL.Text = "Yes" Then
                    '    SmtpServer.EnableSsl = True
                    'Else
                    '    SmtpServer.EnableSsl = False
                    'End If

                    'If TextBoxUseDefaultCredentials.Text = "Yes" Then
                    '    SmtpServer.UseDefaultCredentials = True
                    'Else
                    '    SmtpServer.UseDefaultCredentials = False
                    'End If

                    'SmtpServer.Credentials = New Net.NetworkCredential(TextBoxUserName.Text, TextBoxPassword.Text)


                    objSMTP.SmtpServers.Clear()
                    objSMTP.SmtpServers.Add(server)

                    While objDataReader.Read()
                        If objDataReader("Email").ToString <> "" Then

                            objSMTP.Message.From.AsString = TextBoxEmailFrom.Text
                            objSMTP.Message.To.AsString = objDataReader("Email").ToString
                            objSMTP.Message.Subject = "Promotion: " & TextBoxID.Text
                            objSMTP.Message.BodyPlainText = "Dear " & objDataReader("CustomerName") & "," & vbCrLf & vbCrLf & TextBoxPromotionBodyText.Text

                            Try
                                objSMTP.Send()

                            Catch exBadPassword As MailBeeSmtpLoginBadCredentialsException
                                MsgBox("The login name or password is not correct.", MsgBoxStyle.Exclamation, "Email")
                                blnThereWereErrors = True

                            Catch exBadFromAddress As MailBeeSmtpRefusedSenderException
                                MsgBox("The sender email must be the same as the user's email address.", MsgBoxStyle.Exclamation, "Email")
                                blnThereWereErrors = True

                            Catch ex As Exception
                                MsgBox(ex.Message)
                                blnThereWereErrors = True
                            End Try
                        End If

                        If blnThereWereErrors Then
                            Exit While
                        End If
                    End While

                    If blnThereWereErrors = False Then
                        MessageBox.Show("Mass emailing has completed." & vbCrLf, _
                                "Email Message.", _
                                MessageBoxButtons.OK, _
                                MessageBoxIcon.Information)
                    End If
                End If

                objDataReader.Close()
                ObjConnection.Close()

                Cursor = Cursors.Default
            End With ' objSqlCommand
        End Using ' objSqlCommand
11
Merci pour la réponse. Je l'ai essayé mais ça expire encore.
ajouté l'auteur Emad-ud-deen, source
Merci kcbeard pour la réponse. J'ai essayé o smtp.gmail.com 465 dans telnet et il semble être coincé montrant: se connecter à smtp.gmail.com ... et juste montrant un curseur clignotant alors il sais: Connexion à l'hôte perdu. J'ai été en mesure de se connecter à towel.blinkenlights.nl et cela a fonctionné. Vous ne savez pas pourquoi il y a un problème avec gmail. J'utilise gmail dans mon logiciel client de messagerie tout le temps sans aucun problème. Y at-il un contrôle open source que je peux utiliser dans mon formulaire qui fonctionne avec le courrier électronique?
ajouté l'auteur Emad-ud-deen, source
J'ai réussi à le faire fonctionner en utilisant un autre serveur de messagerie. Vous ne savez pas pourquoi il y a un problème avec Gmail.
ajouté l'auteur Emad-ud-deen, source
Je travaille dans une machine virtuelle Parallels exécutant Windows7 sur un Mac. J'ai utilisé bluebottle.com comme serveur de messagerie qui fonctionne parfaitement. Au moins, je sais que le code fonctionne.
ajouté l'auteur Emad-ud-deen, source
Nous avons essayé d'utiliser MailBee et tous les problèmes de messagerie ont disparu. Je ne sais pas pourquoi, mais je pense qu'il fait défiler les numéros de port et trouve le meilleur à utiliser. Je suis en train de mettre à jour le code dans la publication pour montrer MailBee en cours d'utilisation.
ajouté l'auteur Emad-ud-deen, source
Le code a l'air bien. Peut-être que c'est un problème UAC?
ajouté l'auteur Keith Beard, source
importe un fait essayer de se connecter via la ligne de commande telnet smtp.gmail.com 465, Si vous pouvez vous connecter que d'essayer de réglage UseDefaultCredentials = False
ajouté l'auteur Keith Beard, source
Je suppose que ce n'est probablement pas Google, c'est étrange que cela soit arrivé. Dans quel type d'environnement travaillez-vous? Avez-vous un pare-feu ou un mur dur?
ajouté l'auteur Keith Beard, source

2 Réponses

Essayez d'utiliser un numéro de port différent. Vous ne pouvez pas utiliser le port 465 avec System.Net.Mail car il ne prend en charge que "SSL explicite". Jetez un oeil à cette page pour plus d'informations à ce sujet.

Gmail acceptera le port 25 ou 587 lors de l'envoi de courrier via VB.NET, mais expirera en utilisant le port 465.

Also make sure you have UseDefaultCredentials = False

Jetez également un coup d'œil à cet exemple sur la façon d'envoyer du courrier à l'aide de GMail en C# cela pourrait vous donner un indice supplémentaire.

14
ajouté
Merci pour l'aide. :-)
ajouté l'auteur Emad-ud-deen, source
Oui, j'ai eu le même problème lors de l'utilisation du port 465. Je l'ai corrigé en utilisant 587
ajouté l'auteur Yohannis, source

J'ai eu un problème similaire, dans mon cas j'ai juste oublié de spécifier le protocole, donc au lieu de smtp.gmail.com j'ai dû mettre ssl: //smtp.gmail.com .

1
ajouté