2012-05-21 14 views
11

フォームからGmailを使用してメールを送信するためのコードをテストしていますが、タイムアウトエラーが発生します。Gmailを使用してメールを送信すると、タイムアウトエラーが発生する

電子メールメッセージを送信するために、このコードに何がないか教えてください。

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 

更新: MailBeeを使用してコードを変更しました。これは、すべてのお客様に電子メールを送信する方法です。

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

コードはよく見えます。おそらくそれはUACの問題ですか? –

+0

返事をありがとう。私はそれを試しましたが、それはまだタイムアウトします。 –

+1

問題実際にコマンドラインからtelnet smtp.gmail.com 465で接続しようとすると、UseDefaultCredentials = Falseを設定しようとするよりも接続できます –

答えて

13

別のポート番号を使用してみてください。 System.Net.Mailでポート465を使用することはできません。「明示的なSSL」だけがサポートされているからです。これに関する詳細はthis pageをご覧ください。

ポート465

を使用してVB.NETが、回を経由してメールを送信するときにGmailはまた、あなたがUseDefaultCredentials = False

を持っていることを確認。またメールを送信する方法についてthis exampleを見て作るのポート25または587を受け入れますC#でGMailを使用すると、もっと手がかりを与えるかもしれません。

+0

助けてくれてありがとう。 :-) –

+0

はいポート465を使用しているときも同じ問題がありました。私は587 – Yohannes

-1

私は同じような問題を抱えていましたが、プロトコルを指定するのを忘れてしまったので、smtp.gmail.comの代わりにssl://smtp.gmail.comを入れなければなりませんでした。

関連する問題