【问题标题】:Sending an email with ASP .Net and Gmail SMTP使用 ASP .Net 和 Gmail SMTP 发送电子邮件
【发布时间】:2013-02-03 23:18:10
【问题描述】:

我正在开发一个 ASP .Net 网站。
我的一个 ASPX 页面包含一个按钮。
单击此按钮后,我想使用 Gmail SMTP 服务器发送电子邮件。
我想使用我的 Gmail 帐户作为凭据。

这是按钮的点击事件处理程序:

protected void m_myButton_Click(object p_sender, EventArgs p_args)
{
    string l_subject = "My subject";

    StringBuilder l_builder = new StringBuilder();
    // ...
    string l_body = l_builder.ToString();

    string l_host = ConfigurationManager.AppSettings["SmtpHost"];
    int l_port = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]);

    NameValueCollection l_smtpAccount = (NameValueCollection)ConfigurationManager.GetSection("smtpAccount");
    string l_address = l_smtpAccount["SmtpAddress"];
    string l_password = l_smtpAccount["SmtpPassword"];

    MailMessage l_mail = new MailMessage();
    l_mail.From = new MailAddress(l_address);
    l_mail.To.Add(l_address);
    l_mail.Subject = l_subject;
    l_mail.Body = l_body;

    SmtpClient l_smtp = new SmtpClient();
    l_smtp.Host = l_host; // l_host = "smtp.gmail.com"
    l_smtp.Port = l_port; // l_port = 587
    l_smtp.EnableSsl = true;
    l_smtp.UseDefaultCredentials = false;
    l_smtp.Credentials = new NetworkCredential(l_address, l_password);

    l_smtp.Send(l_mail);
}

命令行 l_smtp.Send(l_mail) 失败。
引发 SMTP 异常,InnerException 属性通知我(从法语翻译成英语):没有建立连接,因为目标计算机拒绝了它 173.194.67.108:587

我的代码基于此页面上的代码:http://www.codeproject.com/Questions/254743/sending-email-in-asp-net-using-smtp-gmail-server

任何帮助将不胜感激

【问题讨论】:

  • 您可以在 ASP.NET 代码之外从您的计算机连接到该服务器和端口吗?例如telnet smtp.gmail.com 587 或使用 PuTTY putty -raw smtp.gmail.com 587。它从这里开始对我有用(虽然我没有尝试 SSL)
  • 1.凭据 - 您不应该使用您的电子邮件作为登录名。我的意思是,如果您的电子邮件是“mymail@gmail.com” - 您的 Credentails 登录名应该是“mymail”,而不是“mymail@gmail.com” 2. l_mail.To.Add(new MailAddress(l_address))
  • @Rup 我尝试使用 telnet 连接到 smtp.gmail.com,但收到错误消息:连接被拒绝。我已将 587 指定为端口号,并将原始指定为协议。我没有尝试使用 telnet 进行连接,因为它不会通知连接成功或失败。
  • @AlexOvechkin 我已经听从了你的两个建议,但我仍然遇到异常
  • @user1139666 如果连接成功,您将收到来自 Google 服务器的消息,例如220 mx.google.com ESMTP gy2sm28975989wib.3 - gsmtp,如果你不这样做,它就会超时。 465端口能用吗? 25端口?您在这台机器上是否有任何出站防火墙 - 您可以尝试暂时关闭防火墙吗? Google 可能会阻止您的子网 - 您可以从其他地方尝试吗?

标签: asp.net email smtp gmail


【解决方案1】:

没有建立连接,因为目标计算机拒绝了它73.194.67.108:587

尝试其他 SMTP 端口:465

【讨论】:

  • 我遇到了另一个异常通知我超时
【解决方案2】:

试试这个...

 protected void Button1_Click(object sender, EventArgs e)
{
 MailMessage mail = new MailMessage();
 mail.To.Add("Email ID where email is to be send");
 mail.To.Add("Another Email ID where you wanna send same email");
 mail.From = new MailAddress("YourGmailID@gmail.com");
 mail.Subject = "Email using Gmail";

 string Body = "Hi, this mail is to test sending mail"+ 
             "using Gmail in ASP.NET";
 mail.Body = Body;

  mail.IsBodyHtml = true;
 SmtpClient smtp = new SmtpClient();
 smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
 smtp.Credentials = new System.Net.NetworkCredential
   ("YourUserName@gmail.com","YourGmailPassword");
//Or your Smtp Email ID and Password
 smtp.EnableSsl = true;
 smtp.Send(mail);
 }

【讨论】:

  • 未指定端口号。正常吗?
  • s 如果你想要你可以包含端口号为 smtp.port=587;
  • 我尝试了端口 465,然后是 587。首先给出了超时。第二个给出凭据错误。但是使用 25 作为端口效果很好!还得拿出 smtp.UseDefaultCredentials = false;
【解决方案3】:

我已按照 Rup 的建议关闭了我的防病毒程序,我没有遇到任何异常。
我将在我的防病毒程序中创建一个自定义规则,以允许我的 ASP .Net 网站和 Gmail SMTP 服务器之间进行通信。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2015-10-22
    • 2014-12-24
    相关资源
    最近更新 更多