【问题标题】:Sending Email - VB.Net - Windows Form发送电子邮件 - VB.Net - Windows 窗体
【发布时间】:2016-06-26 00:14:14
【问题描述】:

我尝试了不同的端口号,但我不断收到错误消息并且没有发送电子邮件。我的目标是能够成功发送电子邮件,并且该消息将包含预约的详细信息。请问有什么帮助吗?

    Dim UserName As String = "example@gmail.com"
    Dim mail As MailMessage = New MailMessage

    mail.From = New MailAddress(UserName)
    mail.To.Add(New MailAddress(txtEmailAddress.Text))
    mail.Subject = "Appointment Details"
    mail.Body = "Test message"

    mail.IsBodyHtml = True

    Dim client As SmtpClient = New SmtpClient("smtp.gmail.com", 465)
    client.EnableSsl = True
    client.Credentials = New System.Net.NetworkCredential(UserName, "***")
    Try
        client.Send(mail)
    Catch ex As Exception
        MessageBox.Show("Sending email failed. Please Try again")
    End Try

【问题讨论】:

  • 另外,从不捕获System.Exception,而是捕获更具体的子类。
  • 嗨,欢迎来到 Stack Overflow!请在您的问题中包含错误消息,可能还有堆栈跟踪,以便我们帮助您识别问题。
  • 在开发代码时,请帮自己一个忙,找出错误所在:MessageBox.Show("Sending email failed. Please Try again. Error message: " & ex.Message)
  • 错误信息是:SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 Authentication Required。
  • 当我使用端口 465 时。它只是说发送电子邮件失败。上面的错误信息是针对端口 25

标签: vb.net email


【解决方案1】:

您需要做的是添加client.UseDefaultCredentials = False,但请确保在调用client.Credentials = New System.Net.NetworkCredential(UserName, "***")之前将其设置为false

另外,对于 GMail,您需要使用端口 587,这是支持 STARTTLS 扩展的端口(这是 System.Net.Mail.SmtpClient 支持 SSL 的唯一方式)。

换句话说,将您的代码更改为:

Dim UserName As String = "example@gmail.com"
Dim mail As MailMessage = New MailMessage

mail.From = New MailAddress(UserName)
mail.To.Add(New MailAddress(txtEmailAddress.Text))
mail.Subject = "Appointment Details"
mail.Body = "Test message"

mail.IsBodyHtml = True

Dim client As SmtpClient = New SmtpClient("smtp.gmail.com", 587)
client.EnableSsl = True
client.UseDefaultCredentials = False
client.Credentials = New System.Net.NetworkCredential(UserName, "***")
Try
    client.Send(mail)
Catch ex As Exception
    MessageBox.Show("Sending email failed. Please Try again")
End Try

【讨论】:

  • 干杯,我现在就测试一下。此外,它说 mail.body... 我可以放置,例如 txtForename.Text,并且电子邮件将发送输入的数据?
  • 嗯。我试图发送一封电子邮件,但它还没有发送,错误消息还没有出现。我认为问题可能与安全设置有关。
  • 如果您没有收到异常,则消息已发送。它可能尚未到达,或者它已被过滤到垃圾邮件文件夹中。
  • @jstedfast If you didn't get an exception, then the messages was sent,不完全正确。这并不意味着它已被发送,它通常意味着邮件服务器将其排除在外,但这并不意味着它会被发送,因为可能会出现其他问题。通常,当被接受时,它将坐在邮件队列中等待轮到它发送出去。例如,最终用户可能会调用 send ,然后什么都没有发生。好吧,他输错了收件人地址,邮件服务器无法发送它,所以它把它推到一边,然后再回来,但并非在所有情况下......用户被认为相信它确实发送了,但它从未发送过......
  • @Codexer 是的,我知道。我的意思是消息被正确发送到 SMTP 服务器。此时,邮件将被传递给收件人,或者他将收到退回邮件。
【解决方案2】:

试试这个,

转到您的 gmail 帐户 (www.gmail.com) 登录,并检查您是否已“为所有邮件启用 Pop”。 您可以在“转发和 POP/IMAP”标签下找到它

同时尝试将端口号切换为 587

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2010-12-24
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多