2012-05-21 12 views
11

Stiamo testando del codice per inviare messaggi di posta elettronica utilizzando Gmail da un modulo, ma ottenere un errore di timeout.L'invio di posta elettronica tramite Gmail dà un errore di timeout

Puoi dirci cosa manca a questo codice per ricevere il messaggio di posta elettronica?

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 

Aggiornamento: Cambio di codice tramite MailBee. Ecco come stiamo facendo email a tutti i clienti:

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 
+0

Il codice sembra buono. Forse è un problema UAC? –

+0

Grazie per la risposta. L'ho provato, ma a volte va ancora. –

+1

importa un fatto prova a connetterti via linea di comando telnet smtp.gmail.com 465, Se riesci a connetterti, prova ad impostare UseDefaultCredentials = False –

risposta

13

Provare a utilizzare un numero di porta diverso. Non è possibile utilizzare la porta 465 con System.Net.Mail poiché supporta solo "SSL esplicito". Date un'occhiata a this page per maggiori informazioni su questo.

Gmail accetta la porta 25 o 587 per l'invio di posta tramite VB.NET, ma gli orari utilizzando la porta 465.

anche assicurarsi di avere UseDefaultCredentials = False

hanno anche uno sguardo a this example su come inviare la posta usando GMail in C# potrebbe darti un altro indizio.

+0

Grazie per l'aiuto. :-) –

+0

Sì, ho avuto lo stesso problema quando usavo la porta 465. L'ho risolto usando 587 – Yohannes

-1

Ho avuto un problema simile, nel mio caso ho appena dimenticato di specificare il protocollo, quindi ho dovuto inserire smtp.gmail.comssl://smtp.gmail.com.