2016-03-12 91 views
0

任何人都可以帮助我。我创建了一个电子邮件程序。点击发送按钮时发生错误。这里是我的代码:发送电子邮件在VB.net

Imports System.Net.Mail 

Public Class frmEmail 
Dim emailaddress As String 
Dim password As String 
Dim port As Integer 
Dim host As String 

Private Sub frmEmail_Load(sender As Object, e As EventArgs) 

If emailaddress.ToLower.Contains("@gmail") Then 
     port = 587 
     host = "smtp.gmail.com" 
    ElseIf emailaddress.ToLower.Contains("@yahoo") Then 
     port = 465 
     host = "smtp.mail.yahoo.com" 
    End If 

End Sub 

Private Sub btnSend_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSend.Click 
    Try 
     Dim smtpServer As New SmtpClient 
     Dim mail As New MailMessage() 
     smtpServer.Credentials = New Net.NetworkCredential(emailaddress, password) 
     smtpServer.Port = port 
     smtpServer.Host = host 
     smtpServer.EnableSsl = True 
     mail = New MailMessage() 
     mail.From = New MailAddress(emailaddress) 
     mail.To.Add(txtTo.Text) 
     mail.Subject = txtSubject.Text 
     mail.Body = txtMessage.Text 
     smtpServer.Send(mail) 
     MsgBox("The mail is send!", MsgBoxStyle.Information) 
    Catch error_t As Exception 
     MsgBox(error_t.ToString) 
    End Try 
End Sub 
End Class 

而且我得到这个错误:System.ArgumentOutOfRangeException:指定参数超出有效值的范围。 参数名:价值 在System.Net.Mail.SmtpClient.set_Port(的Int32值)

***编辑忘了修改它的原代码

+0

我试过使用google发送一个 –

+0

我从数据库加载值 –

回答

-1

你的子 私人小组frmEmail_Load(发件人为对象,e As EventArgs)

当窗体加载时不运行。

因为这port的设置为0

的默认值你需要告诉VB.Net到运行时加载窗体这样

Private Sub frmEmail_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

而且进一步前进的代码,你可能会发现您从电子邮件服务器获得有关身份验证的错误。如果您收到此,仅低于

Dim smtpServer As New SmtpClient 

添加此

smtpServer.UseDefaultCredentials = False 

它可能工作。

+0

我按照你的说法做了,但仍然无法正常工作。我仍然有这个错误:System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围。参数名称:System.Net.Mail.SmtpClient.set_Port处的值(Int32值) –

+0

确定。在这一行上设置一个断点..... smtpServer.Host = host ....运行该程序,当它中断时,将鼠标悬停在上面一行的端口变量上以查找该值设置为的值。让我知道。 –

+0

downvoter会照顾详细说明吗? –