【问题标题】:Unable to send email using Gmail无法使用 Gmail 发送电子邮件
【发布时间】:2012-06-19 11:26:30
【问题描述】:

我正在尝试使用我的 mvc 应用程序中的 gmail 发送电子邮件。我收到以下异常

无法从传输连接读取数据:现有连接被远程主机强行关闭。

这是发送电子邮件的代码

string tn = "EmailVerification.htm";
string fileName = Path.GetFileName(tn);
string templatePath = Path.Combine(Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/EmailTemplates")), fileName);
  System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();

            mailMessage.From = new MailAddress(EmailFrom, "Email");
            mailMessage.To.Add(new MailAddress(To));
            mailMessage.Subject = "subject";
            mailMessage.IsBodyHtml = true;
            MailDefinition mailDef = new MailDefinition();
            mailDef.BodyFileName = templatePath;
            mailDef.IsBodyHtml = true;
            mailDef.Subject = "mailDefsubject";
            mailDef.From = mailMessage.From.ToString();

            ListDictionary replacements = new ListDictionary();

            replacements.Add("<%FIRSTNAME%>", FirstName);
            replacements.Add("<%USERNAME%>", "asd");
            replacements.Add("<%VERIFICATIONLINK%>", VerificationLink);     
            replacements.Add("<%WEBSITE%>", "http://www.mysite.com");

            MailMessage msgHtml = mailDef.CreateMailMessage(To, replacements, new System.Web.UI.Control());
            AlternateView htmlView = AlternateView.CreateAlternateViewFromString(msgHtml.Body, null, "text/html");

            AddLinkedResources(templatePath, ref htmlView);

            mailMessage.AlternateViews.Add(htmlView);

            SmtpClient smtpClient = new SmtpClient();
            Object userState = mailMessage;
            smtpClient.Credentials = new System.Net.NetworkCredential("myaddress@gmail.com", "1234567");
            smtpClient.EnableSsl = true;
            smtpClient.Host = "smtp.gmail.com";
            smtpClient.Port = 587;

            //Attach event handler for async callback
            smtpClient.SendCompleted += new SendCompletedEventHandler(smtpClient_SendCompleted);
            try
            {               

                smtpClient.Send(mailMessage);
                EmailStatus = true;
            }
            catch (SmtpException smtpEx)
            {
                EmailStatus = false;

            }
            catch (Exception ex)
            {
                //HttpContext.Current.Response.Write(ex.InnerException);
                EmailStatus = false;

            }

在 web.config 我有

<system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="noreply@asd.com">
        <network host="smtp.gmail.com" port="587"
                                       userName="asd@gmail.com"
                                       password="asd" />
      </smtp>
    </mailSettings>
  </system.net>

【问题讨论】:

  • 检查是否有防火墙设置干扰。
  • 有关内部异常的任何详细信息?
  • MailDefination 类中有什么内容?
  • @MMK maildef 类在System.Web.UI.WebControls命名空间中定义

标签: c# asp.net-mvc-3


【解决方案1】:

尝试设置:

smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential("myaddress@gmail.com", "1234567");

此外,您似乎订阅了SendCompleted 事件,但此事件旨在用于异步发送电子邮件(SendAsync 方法),因此您可以摆脱它。您正在使用的Send 方法正在阻塞。

您也可以查看following answer

【讨论】:

  • tnx 提供了额外的信息,我确实异步发送了电子邮件,那行代码妨碍了复制粘贴......但是我仍然遇到我尝试关闭防火墙的异常。我在配置文件中有一些设置请查看更新的问题
  • 尝试简化:stackoverflow.com/questions/6974112/… 这行得通吗?另请注意,在 ASP.NET 中使用异步版本时存在问题:stackoverflow.com/q/6935427/29407
  • 我使用了简化版本,但仍然存在相同的(内部)异常...我已在我的其他应用程序中成功使用此代码不知道为什么它会令人不安...我正在使用 Visual Studio 2010,Windows 7,如果有帮助的话
  • 代码(简化版)对我来说非常好用。 ASP.NET MVC 3 -> Windows 7.
  • 我会尝试重新启动我的机器然后希望它会消失 :) tnx 反正你的时间
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 2018-08-12
  • 2011-10-11
  • 2021-07-06
  • 2011-10-16
  • 2018-11-08
  • 2017-04-30
  • 1970-01-01
相关资源
最近更新 更多