【问题标题】:Is it still possible to send an email/text using SMTP?是否仍然可以使用 SMTP 发送电子邮件/文本?
【发布时间】:2016-02-04 06:45:30
【问题描述】:

我有一个为家庭自动化应用程序设置的程序。我的目标是让它在出现严重错误时给我发短信,但我遇到了 smtp 部分的问题。我能够使用我公司的 SMTP 让我的应用程序正常工作(基本上,在我尝试转向免费选项之前,我想从一个工作的、封闭的系统开始,因为这些选项更具限制性,具有讽刺意味的是)。

我在网上浏览了很多很多示例,这似乎是 SMTP 阻止某些方法/端口的问题。我已经使用端口 25、465 和 587(在线使用的常见端口)尝试了以下代码。我也尝试将 EnableSs1 更改为 false,但这也没有奏效。

我知道我可能可以为 SMTP 服务器付费,但我首先尝试以便宜的价格(阅读:免费)购买。实际上,我并不期望需要很多通知。我找到了 turboSMTP,它是免费的,但我必须不使用免费的电子邮件地址,他们会验证您的家庭住址(这听起来有点阴暗......)。

无论如何,我的代码如下。如果有任何方法可以让这个工作(或者如果你知道一个免费的、可用的 SMTP 甚至是另一种方法),请告诉我!

我非常愿意自己做这项工作,我不只是想从别人那里得到解决方案,而且我已经知道该怎么做。您能给我的任何帮助将不胜感激。谢谢!

Try
        Dim Smtp_Server As New SmtpClient
        Dim e_mail As New MailMessage()
        Smtp_Server.UseDefaultCredentials = True
        Smtp_Server.EnableSsl = False
        Smtp_Server.Host = "smtp.gmail.com"
        Smtp_Server.Port = 465
        Smtp_Server.EnableSsl = True
        e_mail.From = New MailAddress("From Email Address", "From Email Name")
        e_mail.To.Add("My Phone Number@mms.att.net")

        e_mail.Subject = "Hello there!"
        e_mail.IsBodyHtml = False
        e_mail.Body = txtMessage.Text

        Smtp_Server.Send(e_mail)
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

【问题讨论】:

  • 这段代码收到的错误信息是什么?与无效凭据相关的任何内容?
  • 哦,这是一个相当冗长的响应,使用端口 25 或 587(发送电子邮件失败,无法连接删除服务器,尝试以访问权限禁止的方式访问套接字,等等)。听起来这些端口完全被阻止以这种方式使用。不过,465 端口似乎超时了。
  • 您表示您想要的只是免费服务。 FWIW,我在 AOL 上添加了 NetworkCredential 来测试您的代码,它工作正常。只需按照他们的设置说明使用端口 587 和 Enablessl=True。

标签: vb.net email text smtp


【解决方案1】:
Imports System.Net.Mail
...
Try
        Dim Email As New MailMessage()
        Email.From = New MailAddress("xxxxxxx@gmail.com")
        Email.To.Add("other@provider.com")
        Email.Subject = "TEST GMAIL"
        Email.IsBodyHtml = False
        Email.Body = TextBox1.Text

        Dim EmailClient As New SmtpClient("smtp.gmail.com", 587)
        EmailClient.EnableSsl = True
        EmailClient.Credentials = New Net.NetworkCredential("xxxxxxx@gmail.com", "password")
        EmailClient.Timeout = 7000
        EmailClient.Send(Email)

Catch ex As SmtpException
        MsgBox(ex.StatusCode & vbCrLf & ex.Message, vbCritical, "SMTP Error!")
End Try

奇怪。 Google 帮助建议使用端口 465 - 不工作,超时。在 587 端口发送邮件。 EnableSsl 必须设置为 True。在凭据中,用户名必须是完整的电子邮件地址。

在 VB2010 上测试,没有错误。立即发送电子邮件。

更新:添加超时(以毫秒为单位)并将 catch 修改为 SmtpException。 目标框架:.NET Framework 4 客户端配置文件

【讨论】:

  • 我猜它可以在没有两步验证的帐户或企业帐户(比如我拥有的帐户)中工作...您没有遇到安全异常吗?
  • 嗯...我有没有两步验证的普通帐户...发送速度很快,没有错误,没有问题...
  • 嗯。这真的很奇怪。我将您的代码直接粘贴到我的应用程序中(更新了身份验证),但它似乎不起作用(我收到“发送失败”)。我想这可能意味着要么端口在工作中被阻止(IT 告诉我情况并非如此),要么在电子邮件收件人端被阻止(在我的情况下,@mms.att.net 和 @hotmail.com) ,或者它可能与VB2012相关?我的电脑上有VB2010 express,我也去试试。我会告诉你进展如何!
  • 嗯,我在 2010 年尝试过。仍然无法正常工作。我有点不知所措,不知道为什么它对你有用,但对我没有用。出于好奇,您将其发送给哪个提供商?如果您尝试将其发送到 gmail 地址,上述代码是否有效?
  • 嗯...我有 VB2010Ex 和 .NET 4 客户端配置文件。将邮件从 gmail 发送到 gmail 以及从 gmail 发送到 gmail。快速且没有错误。尝试修改 catch 块中的代码以从 smtp 获取状态代码和消息。我不知道为什么您的代码不起作用...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多