我们正在测试一些代码,以便使用表单中的Gmail发送电子邮件,但会收到超时错误。
您能告诉我们此代码中缺少什么来发送电子邮件消息吗?
Try
Dim SmtpServer As New SmtpClient()
Dim mail As New MailMessage()
SmtpServer.EnableSsl = True
SmtpServer.Credentials = New Net.NetworkCredential("ouremail@gmail.com", "MyPasswordGoesHere")
SmtpServer.Port = 465
SmtpServer.Host = "smtp.gmail.com"
mail.From = New MailAddress("ouremail@gmail.com")
mail.To.Add("ouremail@gmail.com")
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 :(得分:15)
尝试使用其他端口号。您不能将端口465与System.Net.Mail
一起使用,因为它仅支持“显式SSL”。有关详细信息,请查看this page。
当通过VB.NET发送邮件时,Gmail将接受端口25或587但使用端口465超时。
同时确保您拥有UseDefaultCredentials = False
另请参阅this example了解如何使用C#中的GMail发送邮件,它可能会为您提供更多线索。
答案 1 :(得分:-1)
我有类似的问题,在我的情况下,我只是忘了指定协议,所以我不得不smtp.gmail.com
而不是ssl://smtp.gmail.com
。